Chinaunix首页 | 论坛 | 博客
  • 博客访问: 868974
  • 博文数量: 366
  • 博客积分: 10267
  • 博客等级: 上将
  • 技术积分: 4290
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 14:04
文章分类

全部博文(366)

文章存档

2012年(366)

分类: 系统运维

2012-04-05 21:32:56

进程中的线程共享的资源有哪些?在计算机操作系统原理里面讲到了进程中的线程共享进程的资源。但是对于进程具体共享哪些资源,书上讲得含糊不清,网上的资料也是比较笼统,没有确切的内容来说明到底哪些资源是共享的,哪些资源是独享的。

线程之间共享堆区资源:

线程之间共享栈区(堆栈)资源:

理由如下:

#include
#include
using namespace std;
char *g_pStr = NULL;
int *g_pData = 0;
DWORD WINAPI ThreadFunc1( LPVOID lpThreadParameter );
DWORD WINAPI ThreadFunc2( LPVOID lpThreadParameter );
int main()
{
char *p = new char [1024];
memset(p,0,1024);
strcpy(p,"Hello123456");
g_pStr = p;
int n = 1999;
g_pData = &n;
HANDLE hd1 = CreateThread(NULL,0,ThreadFunc1,NULL,CREATE_ALWAYS,NULL);
HANDLE hd2 = CreateThread(NULL,0,ThreadFunc2,NULL,CREATE_ALWAYS,NULL);
WaitForSingleObject(hd1,INFINITE);
WaitForSingleObject(hd2,INFINITE);
Sleep(500);
return 0;
}
DWORD WINAPI ThreadFunc1( LPVOID lpThreadParameter )
{
char *p = new char [1024];
memset(p,0,1024);
strcpy(p,"Hello123456");
g_pStr = p;
int nData = 122222;
g_pData = &nData;
Sleep(10000);
return 0;
}
DWORD WINAPI ThreadFunc2( LPVOID lpThreadParameter )
{
char *pStr = g_pStr;
if (g_pStr)
{
cout<
}
int *pD = g_pData;
cout<<*pD<
return 0;
}

  

在我们的线程中,线程1中在栈区创建某个对象,在线程2中,通过线程1中的地址,直接来取出线程1中栈区中的某个对象,我们是能够取出来的。在线程2中,我们也可以取出线程1中的某个值。这也就表明了,进程中的线程共享进程中的栈区,也共享进程中的堆区。

阅读(894) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~