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