進程中的線程共享的資源有哪些?在計算機操作系統原理里面講到了進程中的線程共享進程的資源。但是對於進程具體共享哪些資源,書上講得含糊不清,網上的資料也是比較籠統,沒有確切的內容來說明到底哪些資源是共享的,哪些資源是獨享的。
線程之間共享堆區資源:
線程之間共享棧區(堆棧)資源:
理由如下:
#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中的某個值。這也就表明了,進程中的線程共享進程中的棧區,也共享進程中的堆區。