2012年4月5日星期四

进程中的线程共享的资源有哪些?

进程中的线程共享的资源有哪些?



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

线程之间共享堆区资源:

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

理由如下:

#include <iostream>#include <Windows.h>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<<pStr<<endl;	}	int *pD = g_pData;	cout<<*pD<<endl;	return 0;}

  

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



TAG:进程 线程 资源共享 栈区 堆区