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


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

Linux 操作系统 多线程

那啥的骑兵 10 years, 4 months ago

既然你加了一个Linux的标签,那我就假设你专指Linux下的程序。

Linux下没有“临界区/Critical section”和“事件/Event”,所以这两个可以出局了。
原子操作/Atomic operation 不能阻塞线程 ,所以如果你需要让一个线程等待什么东西的时候就不能用,它只适合用来保证数据一致性。
自旋锁/spinlock是一个用忙循环“阻塞”线程的锁,在等待过程中会占用CPU,所以如果你需要让一个线程长时间等待什么东西的时候就不合适,仅适用于“阻塞”是极小概率事件时,因为spinlock不会出让CPU,所以如果条件几乎总是满足,可以减少线程切换,另外它也 不能用于进程同步 ,只适用于同一进程内的线程。
好了,只剩下互斥体了,它能干什么你知道的。

人民币战士 answered 10 years, 4 months ago

Your Answer