线程间的内存共享问题----你弄懂了吗?

来源:互联网 发布:访客网络限速多少 编辑:程序博客网 时间:2024/06/05 03:42

对线程间共享内存的问题,许多同学是不是都觉得很简单?就是用全局变量来共享码,然而你说的并没有什么卵用…….(^__^)…….
对于线程间内存关系不弄得清清楚楚,很难写好多线程程序。最简练而精准的话来形容线程间共享内存:同一个线程组内线程间共享虚拟内存(自己通过实验总结的,然而不久以后发现一本书中(linux设备驱动程序)早就说过了,我读书好少啊O(∩_∩)O哈哈~)
虚拟内存没弄懂,就看看相关资料吧,今天我给的是两个程序。
1.用一个线程改变另一个线程的栈内存数据
2.用一个线程改变另一个线程申请的堆内存数据
通过这两个例子就能看出,这两个线程间的内存,指针是共享的,怎么简练的描述这个共享呢,两个线程间的有效指针,是可以彼此相互使用,并访问的!
示例1

#include<pthread.h>#include<unistd.h>#include<iostream>#include<syscall.h>#include<string.h>using namespace std;pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t cond = PTHREAD_COND_INITIALIZER;void * foo(void *pBuffer){   pthread_mutex_lock(&mutex);   strcpy((char*)pBuffer,"hello");//主线程的栈数据在此被修改   pthread_mutex_unlock(&mutex);   pthread_cond_signal(&cond);}int main(int n, char *arg[]){   char Buffer[20]; //主线程的栈数据   pthread_t pthread_id1;   pthread_create(&pthread_id1,NULL,foo,(void *)Buffer);   pthread_mutex_lock(&mutex);   pthread_cond_wait(&cond,&mutex);//注意pthread_cond_wait()的使用方法   pthread_mutex_unlock(&mutex);   cout<<Buffer<<endl;// 输出数据Buffer到标准输出   return 0;}

示例2

#include<pthread.h>#include<unistd.h>#include<iostream>#include<syscall.h>#include<string.h>using namespace std;pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t cond = PTHREAD_COND_INITIALIZER;void * foo(void *pBuffer){   pthread_mutex_lock(&mutex);   strcpy((char*)pBuffer,"hello");//主线程的堆数据在此被修改   pthread_mutex_unlock(&mutex);   pthread_cond_signal(&cond);}int main(int n, char *arg[]){   char *Buffer = new char[20]; //主线程的堆数据   pthread_t pthread_id1;   pthread_create(&pthread_id1,NULL,foo,(void *)Buffer);   pthread_mutex_lock(&mutex);   pthread_cond_wait(&cond,&mutex);//注意pthread_cond_wait()的使用方法   pthread_mutex_unlock(&mutex);   cout<<Buffer<<endl;// 输出数据Buffer到标准输出   return 0;}
1 0