検索

ホームページ  >  に質問  >  本文

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

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

PHPzPHPz2806日前595

全員に返信(1)返信します

  • 黄舟

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

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

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

    返事
    0
  • キャンセル返事