进程中的线程共享的资源有哪些?在计算机操作系统原理里面讲到了进程中的线程共享进程的资源。但是对于进程具体共享哪些资源,书上讲得含糊不清,网上的资料也是比较笼统,没有确切的内容来说明到底哪些资源是共享的,哪些资源是独享的。
线程之间共享堆区资源:
线程之间共享栈区(堆栈)资源:
理由如下:
#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中的某个值。这也就表明了,进程中的线程共享进程中的栈区,也共享进程中的堆区。