linux中最低的锁定原语是什么。我知道futex_wait
和futex_wake
。但是 futex 可以用于除了锁定之外的信号。什么是最低锁定原语,我在 glibc 库中的哪里可以找到它?其次,条件变量也是基于 futex 的吗?
问问题
345 次
2 回答
0
没有“最低”之类的东西,但是针对不同场景和目的的锁,“信号”并不是区分不同类型锁的正确标准。
- 有一些锁定原语可以执行主动等待,即自旋锁,它们基于原子操作。有了 C11 的场地,这些甚至不再是操作系统功能,
atomic_flag
可以用于此目的。 - 另一类锁原语在等待期间挂起调用线程。在 linux 中,这些都是通过原子操作的组合实现的,并且
futex
作为等待部分的底层工作马。
自旋锁最适合用于您知道关键阶段只有少数汇编程序指令并且调度程序或信号不太可能中断关键阶段的情况。这种情况比许多人倾向于相信的要多得多。因此,atomic_flag
它是 C 语言中一个重要的新特性。
其他锁最适合在主动等待会占用大部分系统资源的情况下使用。
于 2012-05-01T20:28:17.133 回答