Linux Device Driver - critical section

前篇 : Linux Device Driver - workqueue


這篇我們回到 第五章 看看 spin lock / mutex / semaphore /...,
和相關保護 critical section 的機制.
在使用 這些機制之前, 先來看看甚麼是 critical section

wiki 上的解釋:

簡單說就是共同資源, 在多個 thread 存取會出問題的狀況,
有的稱之為 race condition.

會出甚麼問題呢? 我們看這段 example - github

兩個 threads, 會拿共同資源 int x, 如果 x < 6 則 +1 存回去
=> x 最大值會被加至 6 為止.



結果 : 

module init start : 4
module init ret=0
f3() x=0
f2() x=1
f3() x=3
f3() x=4
f2() x=4
f2() x=5
f2() x=7

會發現 x 竟然值會有 7 的情況..
要如何避免呢, 下篇繼續.. 



留言

熱門文章