執行緒同步的幾種方式

2021-07-23 05:14:40 字數 1077 閱讀 9385

程序中線程同步的四種常用方式:

1、 臨界區(ccriticalsection)

當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。擁有臨界區的執行緒可以訪問被保護起來的資源或**

段,其他執行緒若想訪問,則被掛起,直到擁有臨界區的執行緒放棄臨界區為止。具體應用方式:

1、 定義臨界區物件ccriticalsection g_criticalsection;

2、 在訪問共享資源(**或變數)之前,先獲得臨界區物件,g_criticalsection.lock();

3、 訪問共享資源後,則放棄臨界區物件,g_criticalsection.unlock();

2、 事件(cevent)

事件機制,則允許乙個執行緒在處理完乙個任務後,主動喚醒另外乙個執行緒執行任務。比如在某些網路應用程式中,一 個

執行緒如a負責偵聽通訊埠,另外

乙個執行緒b負責更新使用者資料,利用事件機制,則執行緒a可以通知執行緒b何時更新

使用者資料。每個cevent物件可以有

兩種狀態:有訊號狀態和無訊號狀

態。cevent類物件有兩種型別:人工事件和自動

事件。

自動事件物件,在被至少乙個執行緒釋放後自動返回到無訊號狀態;

人工事件物件,獲得訊號後,釋放可利用執行緒,但直到呼叫成員函式reset()才將其設定為無訊號狀態。在建立

cevent物件時,預設建立的是自動事

件。

3、 互斥量(cmutex)

互斥物件和臨界區物件非常相似,只是其允許在程序間使用,而臨界區只限制與同一程序的各個執行緒之間使用,

但是更節省資源,更有效率。

4、 訊號量(csemphore)

當需要乙個計數器來限制可以使用某共享資源的執行緒數目時,可以使用「訊號量」物件。csemaphore類物件儲存了

對當前訪問某乙個指定資源的執行緒

的計數值,該計數值是當前還可以使用該資源的執行緒數目。如果這個計數達到了

零,則所有對這個csemaphore類

物件所控制的資源的訪問嘗試都被

放入到乙個佇列中等待,直到超時或計數值不為零為止。

執行緒同步的幾種方式

程序中線程同步的四種常用方式 一 臨界區 ccriticalsection 當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。擁有臨界區的執行緒可以訪問被保護起來的資源或 段,其他執行緒若想訪問,則被掛起,直到擁有臨界區的執行緒放棄臨界區為止。具體應用方式 1 定義臨界區物件ccritica...

執行緒同步的幾種方式

程序中線程同步的四種常用方式 1 臨界區 ccriticalsection 當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。擁有臨界區的執行緒可以訪問被保護起來的資源或 段,其他執行緒若想訪問,則被掛起,直到擁有臨界區的執行緒放棄臨界區為止。具體應用方式 1 定義臨界區物件ccritica...

執行緒同步的幾種方式

1.同步 就是在發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回,同時其它執行緒也不能呼叫這個方法。2.執行緒同步 當有乙個執行緒在對記憶體進行操作時,其他執行緒都不可以對這個記憶體位址進行操作,直到該執行緒完成操作,其他執行緒才能對該記憶體位址進行操作,而其他執行緒處於等待狀態。在多執行緒程...