進程中的線程共享的資源有哪些?


進程中的線程共享的資源有哪些?在計算機操作系統原理里面講到了進程中的線程共享進程的資源。但是對於進程具體共享哪些資源,書上講得含糊不清,網上的資料也是比較籠統,沒有確切的內容來說明到底哪些資源是共享的,哪些資源是獨享的。

線程之間共享堆區資源:

線程之間共享棧區(堆棧)資源:

理由如下:

#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中的某個值。這也就表明了,進程中的線程共享進程中的棧區,也共享進程中的堆區。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM