1. 程式人生 > >同一個程序中的執行緒共享的資源和執行緒獨享的資源

同一個程序中的執行緒共享的資源和執行緒獨享的資源

執行緒共享的環境包括:程序程式碼段程序的公有資料(利用這些共享的資料,執行緒很容易的實現相互之間的通訊)、程序開啟的檔案描述符訊號的處理器程序的當前目錄和程序使用者ID與程序組ID。

程序擁有這許多共性的同時,還擁有自己的個性。有了這些個性,執行緒才能實現併發性。這些個性包括:

1.執行緒ID
每個執行緒都有自己的執行緒ID,這個ID在本程序中是唯一的。程序用此來標識執行緒。

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

3.執行緒的堆疊
堆疊是保證執行緒獨立執行所必須的。
執行緒函式可以呼叫函式,而被呼叫函式中又是可以層層巢狀的,所以執行緒必須擁有自己的函式堆疊, 使得函式呼叫可以正常執行,不受其他執行緒的影響。

4.錯誤返回碼
由於同一個程序中有很多個執行緒在同時執行,可能某個執行緒進行系統呼叫後設置了errno值,而在該 執行緒還沒有處理這個錯誤,另外一個執行緒就在此時被排程器投入執行,這樣錯誤值就有可能被修改。所以,不同的執行緒應該擁有自己的錯誤返回碼變數。

5.執行緒的訊號遮蔽碼
由於每個執行緒所感興趣的訊號不同,所以執行緒的訊號遮蔽碼應該由執行緒自己管理。但所有的執行緒都 共享同樣的訊號處理器。

6.執行緒的優先順序
由於執行緒需要像程序那樣能夠被排程,那麼就必須要有可供排程使用的引數,這個引數就是執行緒的優先順序。