執行緒間同步

2021-08-26 20:27:34 字數 837 閱讀 2742

1. 臨界區:當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。擁有臨界區的執行緒可以訪問被保護起來的資源或**段,其他執行緒若想訪問,則被掛起,直到擁有臨界區的執行緒放棄臨界區為止。

2. 原子操作原理:單cpu可以暫時遮蔽全部中斷,多cpu通過指令來保證同一時刻只有乙個cpu對其進行操作

1. 事件(cevent)

事件機制,則允許乙個執行緒在處理完乙個任務後,主動喚醒另外乙個執行緒執行任務。比如在某些網路應用程式中,乙個執行緒如a負責偵聽通訊埠,另外乙個執行緒b負責更新使用者資料,利用事件機制,則執行緒a可以通知執行緒b何時更新使用者資料。每個cevent物件可以有兩種狀態:有訊號狀態和無訊號狀態。cevent類物件有兩種型別:人工事件和自動事件。

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

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

2. 訊號量(semaphore):儲存了對當前訪問某乙個指定資源的執行緒的計數值(原子操作)

down: 檢查其值是否大於0。若該值大於0,將其值減1(即用掉乙個儲存的喚醒訊號)並繼續執行;如果該值為0,執行緒就睡眠,而且此時down操作並未結束。

up: 對訊號量的值增1。如果乙個或多個執行緒在該訊號量上睡眠,無法完成乙個先前的down操作,則由系統選擇其中(如隨機挑選)並允許該執行緒完成它的down操作

3. 互斥量(mutex):訊號量的乙個簡化版本,只會處於解鎖(0)和加鎖(其他值)。

原理和訊號量差不多

如果該互斥量已經加鎖,呼叫執行緒阻塞,直到在臨界區中的執行緒完成並解鎖。如果多個執行緒被阻塞在該互斥量上,將隨機選擇乙個執行緒並允許它獲得鎖。

程序執行緒間同步

一 posix訊息佇列 通過固定名稱來建立和引用訊息佇列 1.可以認為是乙個訊息鍊錶,有足夠的許可權的執行緒可以往佇列中放置和獲取訊息。2.可指定優先順序 在空佇列放置訊息時候能夠產生乙個訊號或啟動乙個執行緒 3.建立訊息佇列mq open mq close 關閉 並不刪除 mq unlink 刪除...

執行緒間的同步

因為之前對執行緒的同步不是很清晰,並且也沒有怎麼重視,其實就是懶得動手,正好現在沒事所以練習一下。首先用到的幾個函式 handle hthread createthread null,0,fun,null,0,null 建立執行緒 fun的實現在下面貼出來 hmutex createmutex nu...

執行緒 程序間同步

1 競爭條件 兩個或多個程序 執行緒讀寫某些共享資料時,結果取決於其cpu排程的執行次序,這種現象稱為競爭條件 2 互斥 以某種手段確保當乙個程序 執行緒在使用乙個共享變數或檔案時,其他程序 執行緒不能做同樣的操作 3 臨界區 把對共享記憶體進行訪問的程式片段稱為臨界區,如果能使得兩個程序 執行緒不...