3

linux中最低的锁定原语是什么。我知道futex_waitfutex_wake。但是 futex 可以用于除了锁定之外的信号。什么是最低锁定原语,我在 glibc 库中的哪里可以找到它?其次,条件变量也是基于 futex 的吗?

4

2 回答 2

1

阅读有关futex -es 的各种文档,包括futex(2)futex(7)手册页。您将了解到 pthread 锁定原语是使用 futex 和汇编代码的混合实现的(在可移植 C99 中无法表达的事情)

(正如我在评论中所说)

于 2012-05-01T19:52:22.510 回答
0

没有“最低”之类的东西,但是针对不同场景和目的的锁,“信号”并不是区分不同类型锁的正确标准。

  • 有一些锁定原语可以执行主动等待,即自旋锁,它们基于原子操作。有了 C11 的场地,这些甚至不再是操作系统功能,atomic_flag可以用于此目的。
  • 另一类锁原语在等待期间挂起调用线程。在 linux 中,这些都是通过原子操作的组合实现的,并且futex作为等待部分的底层工作马。

自旋锁最适合用于您知道关键阶段只有少数汇编程序指令并且调度程序或信号不太可能中断关键阶段的情况。这种情况比许多人倾向于相信的要多得多。因此,atomic_flag它是 C 语言中一个重要的新特性。

其他锁最适合在主动等待会占用大部分系统资源的情况下使用。

于 2012-05-01T20:28:17.133 回答