程序中線程同步的四種常用方式:
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.執行緒同步 當有乙個執行緒在對記憶體進行操作時,其他執行緒都不可以對這個記憶體位址進行操作,直到該執行緒完成操作,其他執行緒才能對該記憶體位址進行操作,而其他執行緒處於等待狀態。在多執行緒程...