Linux中最低的锁定原语是什么

时间:2012-05-01 18:04:38

标签: c linux gcc x86-64

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

2 个答案:

答案 0 :(得分:1)

阅读有关futex的各种文档,包括futex(2)futex(7)手册页。您将了解到pthread锁定原语是通过futexes和汇编代码的混合实现的(在便携式C99中做不可表达的事情)

(正如我在评论中所说)

答案 1 :(得分:0)

没有“最低”这样的东西,但是针对不同场景和目的的锁定以及“信令”不是区分不同种类锁的正确标准。

  • 有一些锁定原语可以执行活动等待,自旋锁, 这是基于原子操作的。随着C11的场地,这些 甚至不再是OS功能,atomic_flag可用于此。
  • 另一类锁原语暂停调用线程 等待。在linux中,这些都是通过原子操作和futex的组合实现的 在下面等待等待。

自旋锁最适用于您知道关键阶段只有少数汇编指令以及调度程序或信号不可能中断临界阶段的情况。与许多人倾向于相信的情况相比,情况更多。因此atomic_flag是C语言中一个重要的新功能。

其他锁最好用于主动等待占用大部分系统资源的上下文中。