线程间的内存共享问题----你弄懂了吗?
对线程间共享内存的问题,许多同学是不是都觉得很简单?就是用全局变量来共享码,然而你说的并没有什么卵用…….(^__^)……. 对于线程间内存关系不弄得清清楚楚,很难写好多线程程序。最简练而精准的话来形容线程间共享内存:同一个线程组内线程间共享虚拟内存(自己通过实验总结的,然而不久以后发现一本书中(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; }