linux同步機制

一、自旋鎖函數

得到自旋鎖以後禁止內核搶佔,但能夠被中斷上半部打斷。運行於中斷上下文優化

單cpu不可搶佔內核:空操做線程

單cpu可搶佔內核:禁止內核搶佔,不發生自旋指針

多cpu可搶佔內核:禁止內核搶佔+自旋遞歸

二、互斥鎖進程

內核能夠搶佔,能夠被其餘進程搶佔,運行於進程上下文資源

三、讀寫鎖效率

因爲其特殊的邏輯使得其效率相對普通的互斥鎖和自旋鎖要慢一個數量級,按POSIX標準 在線程申請讀鎖並未釋放前本線程申請寫鎖是成功的,但運行後的邏輯結果是沒法預測。讀和寫同時獲取鎖,寫具備優先獲取。特殊的自旋鎖,禁止搶佔。date

四、順序鎖cpu

對讀寫鎖的一種優化,禁止內核搶佔,讀和寫能夠同時進行,多個讀者能夠同時訪問臨界資源,但不能同時寫

讀寫能夠同時進行這是讀寫鎖不具有的,但使用順序鎖也有限制條件:訪問的臨界資源不能是指針

五、RCU(read-copy update)

讀寫能夠同時進行,寫數據時,先拷貝而後修改,再用更新好的數據覆蓋原有數據。

一樣得到鎖以後禁止內核搶佔

六、遞歸鎖

互斥鎖的一個特例,互斥鎖設置參數PTHREAD_MUTEX_RECURSIVE_NP,運行互斥鎖遞歸加鎖和釋放鎖

七、原子操做

八、信號量

九、信號

十、barrier(信號屏障)

barrier()函數先後的代碼執行不能越過barrier

相關文章
相關標籤/搜索