首頁  >  問答  >  主體

linux - 如何选择合适的线程同步机制?

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

PHPzPHPz2722 天前552

全部回覆(1)我來回復

  • 黄舟

    黄舟2017-04-17 13:24:29

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

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

    回覆
    0
  • 取消回覆