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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值