84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
众所周知,实现线程进程同步的机制有:临界区、互斥体、信号量、事件、原子操作、自旋锁。除了临界区只能实现线程内部的互斥访问,其他几种机制都可以实现进程间的互斥和同步。那么他们的优劣势是什么?如何在不同应用场景下选择不同的机制?
学习是最好的投资!
既然你加了一个Linux的标签,那我就假设你专指Linux下的程序。
Linux下没有“临界区/Critical section”和“事件/Event”,所以这两个可以出局了。 原子操作/Atomic operation不能阻塞线程,所以如果你需要让一个线程等待什么东西的时候就不能用,它只适合用来保证数据一致性。 自旋锁/spinlock是一个用忙循环“阻塞”线程的锁,在等待过程中会占用CPU,所以如果你需要让一个线程长时间等待什么东西的时候就不合适,仅适用于“阻塞”是极小概率事件时,因为spinlock不会出让CPU,所以如果条件几乎总是满足,可以减少线程切换,另外它也不能用于进程同步,只适用于同一进程内的线程。 好了,只剩下互斥体了,它能干什么你知道的。
既然你加了一个Linux的标签,那我就假设你专指Linux下的程序。
Linux下没有“临界区/Critical section”和“事件/Event”,所以这两个可以出局了。
原子操作/Atomic operation不能阻塞线程,所以如果你需要让一个线程等待什么东西的时候就不能用,它只适合用来保证数据一致性。
自旋锁/spinlock是一个用忙循环“阻塞”线程的锁,在等待过程中会占用CPU,所以如果你需要让一个线程长时间等待什么东西的时候就不合适,仅适用于“阻塞”是极小概率事件时,因为spinlock不会出让CPU,所以如果条件几乎总是满足,可以减少线程切换,另外它也不能用于进程同步,只适用于同一进程内的线程。
好了,只剩下互斥体了,它能干什么你知道的。