linux - 如何选择合适的线程同步机制?
PHPz
PHPz 2017-04-17 13:22:29
0
1
549

众所周知,实现线程进程同步的机制有:临界区、互斥体、信号量、事件、原子操作、自旋锁。除了临界区只能实现线程内部的互斥访问,其他几种机制都可以实现进程间的互斥和同步。那么他们的优劣势是什么?如何在不同应用场景下选择不同的机制?

PHPz
PHPz

学习是最好的投资!

全部回覆(1)
黄舟

既然你加了一個Linux的標籤,那我就假設你專指Linux下的程式。

Linux下方沒有“臨界區/Critical section”和“事件/Event”,所以這兩個可以出局了。
原子操作/Atomic operation不能阻塞執行緒,所以如果你需要讓一個執行緒等待什麼東西的時候就不能用,它只適合用來保證資料一致性。
自旋鎖/spinlock是一個用忙循環「阻塞」線程的鎖,在等待過程中會佔用CPU,所以如果你需要讓一個線程長時間等待東西的時候就不合適,僅適用於「阻塞」是極小機率事件時,因為spinlock不會出讓CPU,所以如果條件幾乎總是滿足,可以減少線程切換,另外它也不能用於進程同步,只適用於同一進程內的線程。
好了,只剩下互斥了,它能做什麼你知道的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!