Try   HackMD

並行程式的潛在問題(四)

先前已經向各位介紹如何利用鎖保證多執行緒程式的同步,像是 Spinlock 、 Mutex lock 與 Semaphore 等。這樣的作法雖然可以有效避免 Condition race ,卻因為執行緒被阻塞而增加程式的延遲。

非阻塞演算法

為了有效避免上述狀況,電腦科學家又提出了非阻塞演算法,為了實現該演算法,計算機通常需要支援 Atomic operations ,常見的操作像是 CAS (Compare And Swap)。

Lock-free

在 Lock-free 系統中,有些特定的計算仍有可能被 Block 一段時間,不過,其他執行緒不會因為該計算被阻塞,而是繼續做其他無須該資原的任務進而增加整體的吞吐量。

Lock-free 這邊的無鎖指的是沒有執行緒會被鎖住,而不是程式中沒有鎖。

Wait-free

Thread pool

KFIFO

Lock-free thread pool

Reference