第十一章讀書筆記

2022-09-13 04:48:12 字數 816 閱讀 8929

併發(concurrency)指的是多個執行單元同時、並行被執行。而併發的執行單元對共享資 源〈如硬體資摞、程式中的全域性變數、靜態變數等〉的訪問很容易導致競態條件( race conditions)。例如,有乙個裝置檔案。程序 a 向該個裝置檔案寫入 1000 個「a飛而程序 b 向 裝置檔案寫入了 2000 個「b」,每次寫資料之前會清空上一次寫入的資料。現在有乙個程序 c, 需要先讀出程序 a 寫入裝置檔案的全部字元( 1000 個「a」〉,然後再讀出程序 b 寫入裝置文 件的全部字元(2000 個「b勺。如果按正常的執行順序,應該是 a今c今b今c. 也就是說 a 進 程先向裝置檔案寫資料,寫完後, c 程序再讀取資料,然後 b 程序向裝置檔案寫入資料,最 後再由 c 程序讀取資料。 

原子操作就是指單位操作,也就是說, 原子操作在執行的過程中不能被中斷。實際上,在 c、 c++、 j**a 等語言中看似原子的語旬,本質上都不是原子的,這就需要通過某些機制使其變成原子 操作,否則在併發的環境中可能會產生髒資料〈由多程序或多執行緒同時訪問某一共享資料而產生的 不符合預期的資料〉

併發和競態在 linux 核心中是普遍存在的。中斷遮蔽、原子操作、自旋鎖、 訊號量、 互斥體都 是解決併發問題的機制。中斷遮蔽很少單獨使用,原子操作只能對整數和位進行操作,而自旋鎖、 訊號量、 互斥體的應有比較廣泛。當然,如果強調**片段的執行順序, 可以使用完成量。 自旋鎖會由於不斷自旋而導致死迴圈(也就是死鎖〉,而且鎖定狀態會造成 臼u 閒置,因此用 自旋鎖保護的臨界區的**不能執行時間過長,當然,更不允許臨界區出現阻塞情況。訊號量允許 臨界區阻惑,因此適用於大臨界區的情況. 讀寫↓自旋鎖和讀寫訊號量分別是放寬了條件的自旋鎖和訊號量,它們允許多個執行單元同時對 .共享資源執行讀操作。

第十一章 讀書筆記

第十一章 linux驅動程式中的 併發控制 併發 concurrency 指的是多個執行單元同時 並行被執行。而併發的執行單元對共享資 源 如硬體資摞 程式中的全域性變數 靜態變數等 的訪問很容易導致競態條件 race conditions 自旋鎖並不關心鎖定的 臨界區究竟是怎樣的操作,不管是讀還是...

讀書筆記 第十一章 C in depth

思考 11 2 from user in sampledata.allusers select user 轉譯 sampledata.allusers.select user user 範圍變數都可以是隱式型別。cast,oftype將飛型別化序列轉化為強型別。遇到不匹配型別,cast報錯,ofty...

APUE讀書筆記 第十一章 執行緒

新建立的執行緒可以訪問程序的位址空間,並且繼承呼叫執行緒的浮點環境和訊號遮蔽字,但是該執行緒的掛起訊號集會被清除 新執行緒時呼叫pthread self函式獲取自己的執行緒id,而不是從共享記憶體中讀出,或者從執行緒的啟動歷程中以引數的形式接收到的,因為新執行緒可能在主線程呼叫pthread cre...