程序中線程同步的四種常用方式:
臨界區(ccriticalsection)
當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。擁有臨界區物件的執行緒可以訪問被保護的資源或**段,其他執行緒若想訪問,則被掛起,直到擁有臨界區的執行緒釋放臨界區為止。
定義臨界區物件ccriticalsection g_criticalsection;
在訪問共享資源之前,先獲取臨界區物件,g_criticalsection;
訪問資源結束後,釋放臨界區物件,g_criticalsection.unlock();
事件(cevent)
事件機制,則允許乙個執行緒在處理完乙個任務後,主動喚醒另外乙個執行緒執行任務。比如在某些網路應用程式中,乙個執行緒a負責偵聽通訊埠,另外乙個執行緒b負責更新使用者資料,利用事件機制,則執行緒a可以通知執行緒b何時更新使用者資料。
每個cevent物件可以有兩種狀態:
有訊號狀態和無訊號狀態。
cevent類物件有兩種型別:人工事件和自動事件。
自動事件物件,在被至少乙個執行緒釋放後自動返回到無訊號狀態;
人工事件物件,獲得訊號後,釋放可利用執行緒,但直到呼叫成員函式reset()才將其設定為無訊號狀態。在建立cevent物件時,預設建立的是自動事件。
互斥量(cmutex)
互斥物件和臨界區物件非常相似,只是其允許在程序間使用,而臨界區只限制與同一程序的各個執行緒之間使用,但是更節省資源,更有效率。
互斥量與臨界區的作用非常相似,但互斥量是可以命名的,也就是說它可以跨越程序使用。所以建立互斥量需要的資源更多,所以如果只為了在程序內部是用的話使用臨界區會帶來速度上的優勢並能夠減少資源佔用量 。因為互斥量是跨程序的互斥量一旦被建立,就可以通過名字開啟它。
訊號量(csemphore)
當需要乙個計數器來限制可以使用某共享資源的執行緒數目時,可以使用「訊號量」物件。csemaphore類物件儲存了對當前訪問某乙個指定資源的執行緒的計數值,該計數值是當前還可以使用該資源的執行緒數目。如果這個計數達到了零,則所有對這個csemaphore類物件所控制的資源的訪問嘗試都被放入到乙個佇列中等待,直到超時或計數值不為零為止。
作業系統 執行緒同步
執行緒同步是為了多執行緒能夠安全訪問共享資源。臨界區 互斥量 事件 訊號量四種方式 臨界區 critical section 互斥量 mutex 訊號量 semaphore 事件 event 的區別 1 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。在任意時刻只允許乙...
linux多執行緒 作業系統執行緒同步互斥
這一目主要我想得是理論和實際結合的辦法去做,先將理論,把這塊在作業系統中的內容先進行陳述。然後用linux下的 去真正實現。perterson演算法是用來是實現對臨界區資源的互斥訪問,它是用軟體的機制實現。也就是說在linux系統程式設計當中,如果不讓你使用pthread mutex t mutex...
作業系統 執行緒
靜態鏈結庫是乙個或多個obj檔案的打包,所以有人乾脆把obj檔案生成lib檔案的過程稱為archive,即合併在一起。比如你鏈結乙個靜態庫,如果其中有錯,他會準確的找到是哪個obj有錯,即靜態lib只是殼子。當我們的應用工程在使用靜態庫鏈結時,靜態鏈結庫要參與編譯,在生成執行檔案之前的鏈結過程中,將...