众所周知,实现线程进程同步的机制有:临界区、互斥体、信号量、事件、原子操作、自旋锁。除了临界区只能实现线程内部的互斥访问,其他几种机制都可以实现进程间的互斥和同步。那么他们的优劣势是什么?如何在不同应用场景下选择不同的机制?
学习是最好的投资!
既然你加了一個Linux的標籤,那我就假設你專指Linux下的程式。
Linux下方沒有“臨界區/Critical section”和“事件/Event”,所以這兩個可以出局了。 原子操作/Atomic operation不能阻塞執行緒,所以如果你需要讓一個執行緒等待什麼東西的時候就不能用,它只適合用來保證資料一致性。 自旋鎖/spinlock是一個用忙循環「阻塞」線程的鎖,在等待過程中會佔用CPU,所以如果你需要讓一個線程長時間等待東西的時候就不合適,僅適用於「阻塞」是極小機率事件時,因為spinlock不會出讓CPU,所以如果條件幾乎總是滿足,可以減少線程切換,另外它也不能用於進程同步,只適用於同一進程內的線程。 好了,只剩下互斥了,它能做什麼你知道的。
既然你加了一個Linux的標籤,那我就假設你專指Linux下的程式。
Linux下方沒有“臨界區/Critical section”和“事件/Event”,所以這兩個可以出局了。
原子操作/Atomic operation不能阻塞執行緒,所以如果你需要讓一個執行緒等待什麼東西的時候就不能用,它只適合用來保證資料一致性。
自旋鎖/spinlock是一個用忙循環「阻塞」線程的鎖,在等待過程中會佔用CPU,所以如果你需要讓一個線程長時間等待東西的時候就不合適,僅適用於「阻塞」是極小機率事件時,因為spinlock不會出讓CPU,所以如果條件幾乎總是滿足,可以減少線程切換,另外它也不能用於進程同步,只適用於同一進程內的線程。
好了,只剩下互斥了,它能做什麼你知道的。