# 並行程式的潛在問題(四) 先前已經向各位介紹如何利用鎖保證多執行緒程式的同步,像是 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 - [並行和多執行緒程式設計](https://hackmd.io/@sysprog/concurrency/https%3A%2F%2Fhackmd.io%2F%40sysprog%2Fconcurrency-lockfree?fbclid=IwAR3Kd-YOh__7NJWe-kj3k3Pt1ssi2sUzO9_jQto8VjrLkAaInX_kh9sr5wU) - [RethinkDB - Lock-free vs. wait-free concurrency](https://rethinkdb.com/blog/lock-free-vs-wait-free-concurrency/) - [高效线程池之无锁化实现(Linux C)](https://blog.csdn.net/xhjcehust/article/details/45844901) - [巧夺天工的 kfifo (修订版)](https://blog.csdn.net/linyt/article/details/53355355) - [kfifo 部份原始碼閱讀 & Concurrent Thread Pool](https://ithelp.ithome.com.tw/articles/10214929)