執行緒之間共享的資源有哪些

2022-01-11 23:53:16 字數 1229 閱讀 6036

同一程序間的執行緒究竟共享哪些資源呢,而又各自獨享哪些資源呢?

共享的資源有:

a. 堆  由於堆是在程序空間中開闢出來的,所以它是理所當然地被共享的;因此new出來的都是共享的(16位平台上分全域性堆和區域性堆,區域性堆是獨享的)

b. 全域性變數 它是與具體某一函式無關的,所以也與特定執行緒無關;因此也是共享的

c. 靜態變數 雖然對於區域性變數來說,它在**中是「放」在某一函式中的,但是其存放位置和全域性變數一樣,存於堆中開闢的.bss和.data段,是共享的

d. 檔案等公用資源  這個是共享的,使用這些公共資源的執行緒必須同步。win32 提供了幾種同步資源的方式,包括訊號、臨界區、事件和互斥體。

獨享的資源有

a. 棧 棧是獨享的

b. 暫存器  這個可能會誤解,因為電腦的暫存器是物理的,每個執行緒去取值難道不一樣嗎?其實執行緒裡存放的是副本,包括程式計數器pc

執行緒共享的環境包括:

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

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

這些個性包括:

1.執行緒id

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

2.暫存器組的值

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

3.執行緒的堆疊

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

4.錯誤返回碼

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

5.執行緒的訊號遮蔽碼

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

6.執行緒的優先順序

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

多執行緒之間共享的資源有哪些

程序是資源分配的基本單位 執行緒是系統排程的基本單位。平時我們寫的程式都是作為執行緒執行的 程序可以看做是包括一系列執行緒和資源的統稱 乙個程序至少包括乙個 執行緒 主線程,進入main函式時產生的 在其中可以建立其它執行緒,也可以不建立。同一程序間的執行緒究竟共享哪些資源呢,而又各自獨享哪些資源呢...

執行緒之間共享與獨享的資源

程序是資源分配的基本單位 執行緒是系統排程的基本單位。平時我們寫的程式都是作為執行緒執行的 程序可以看做是包括一系列執行緒和資源的統稱 乙個程序至少包括乙個 執行緒 主線程,進入main函式時產生的 在其中可以建立其它執行緒,也可以不建立。同一程序間的執行緒究竟共享哪些資源呢,而又各自獨享哪些資源呢...

關於執行緒 程序之間的資料共享

程序與執行緒共享資料 在一程序建立兩個執行緒 執行緒1 執行緒2,測試三者之間的關係 include include pthread.c 10 static int m 11 void pthread1 void arg 12 18 void pthread2 void arg 19 23 int ...