同一進程下的線程可以共享什麼

同一進程下的線程可以共享datanbsp;sectionnbsp;和filenbsp;fd。nbsp;線程共享的內容包括:進程代碼段、進程的共有數據(利用這些共享的數據,線程很容易的實現相互之間的通訊)、進程打開的文件描述符、信號的處理器、進程的當前目錄和進程用户ID與進程組ID。

同一進程下的線程可以共享什麼

線程獨有的內容包括:線程ID、寄存器組的值、線程的堆棧、錯誤返回碼、線程的信號屏蔽碼。

每個線程都有自己的線程ID,這個ID在本進程中是唯一的。進程用此來標識線程。

由於線程間是併發運行的,每個線程有自己不同的運行線索,當從一個線程換到另一個線程上時,必須將原有的線程的寄存器集合的狀態保存,以便將來該線程在被重新切換到時能得以恢復。

堆棧是保證線程獨立運行所必須的。線程函數可以調用函數,而被調用函數又是可以層層嵌套的,所以線程必須擁有自己的函數堆棧,使得函數調用可以正常執行,不受其它線程的影響。

同一進程下的線程可以共享什麼 第2張

由於同一個進程中有很多個線程在同時運行,可能某個線程進行系統調用後設置了errno值,而在該線程還沒有處理這個錯誤,另外一個線程就在此時被調度去投入運行,這樣錯誤值就有可能被修改。所以,不同的線程應該擁有自己的錯誤返回碼變量。

由於每個線程所感興趣的信號不通,所以線程的信號屏蔽碼應該由線程自己管理。但所有的線程都共享同樣的信號處理器。