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

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

#include
#include
#include
#include
#include

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到标准输出
   return 0;
}

示例2

#include
#include
#include
#include
#include

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到标准输出
   return 0;
}

你可能感兴趣的:(linux)