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

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

阅读 4.2k
1 个回答

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题