執行緒同步的方式包括:互斥鎖、讀寫鎖、條件變數、訊號量和令牌。
下面提供token在ace中的一種實現方法。可以從下面的類圖,可以看到ace是如何設計token的。
下面對ace_token中的組要方法提供分析。
判斷是否有執行緒已經持有互斥鎖了,如果沒人持有,表示臨界資源是可用的,那麼可以立即返回成功。
檢查是不是執行緒嘗試遞迴獲取互斥鎖。因為token支援這種情況,所以也可立即返回成功。同時將nesting計數器自增。
建立乙個token entry,並將其排入佇列。
執行緒睡眠,如果執行緒喚醒後,發現當前執行緒不是token的擁有者將繼續睡眠。
執行緒被喚醒後,將token entry從佇列中刪除。
如果發現巢狀層數大於0,需要將巢狀層數的計數器減一,然後讓該執行緒繼續持有token。
否則,該執行緒負責從佇列中按照一定的策略,取出token entry,並通過該entry通知阻塞在entry上的執行緒,資源被釋放,你可以使用資源了。
注:token entry的建立者和刪除者是同乙個執行緒,並且在同乙個方法中完成的(acquire)。
C 執行緒同步的幾種方法
幾種方法 我們在程式設計的時候,有時會使用多執行緒來解決問題,比如你的程式需要在後台處理一大堆資料,但還要使使用者介面處於可操作狀態 或者你的程式需要訪問一些外部資源如資料庫或網路檔案等。這些情況你都可以建立乙個子執行緒去處理,然而,多執行緒不可避免地會帶來乙個問題,就是執行緒同步的問題。如果這個問...
C 執行緒同步的幾種方法
我們在程式設計的時候,有時會使用多執行緒來解決問題,比如你的程式需要在後台處理一大堆資料,但還要使使用者介面處於可操作狀態 或者你的程式需要訪問一些外部資源如資料庫或網路檔案等。這些情況你都可以建立乙個子執行緒去處理,然而,多執行緒不可避免地會帶來乙個問題,就是執行緒同步的問題。如果這個問題處理不好...
C 執行緒同步的幾種方法
我們在程式設計的時候,有時會使用多執行緒來解決問題,比如你的程式需要在後台處理一大堆資料,但還要使使用者介面處於可操作狀態 或者你的程式需要訪問一些外部資源如資料庫或網路檔案等。這些情況你都可以建立乙個子執行緒去處理,然而,多執行緒不可避免地會帶來乙個問題,就是執行緒同步的問題。如果這個問題處理不好...