1

我正在阅读此链接以了解futexLinux。这是我不明白的事情。

为了获取锁,可以使用原子测试和设置指令(例如 cmpxchg())测试 0 并设置为 1。在这种情况下,锁定线程获取锁而不涉及内核(以及内核不知道这个 futex 存在)。当下一个线程尝试获取锁时,零测试将失败,需要内核参与。

我不太明白为什么“在不涉及内核的情况下获取锁”。

我一直认为原子指令,例如test-and-set,总是涉及内核。

那么为什么第一次获取锁不会涉及内核呢?更具体地说,原子指令必须或可能涉及内核?

4

1 回答 1

1

原子测试和设置指令只是用户代码正常执行的普通指令。它不涉及内核。

Futex 提供了一种有效的方式来执行锁定和解锁操作,而无需让内核参与快速路径。但是,如果一个进程需要进入睡眠(等待获取锁)或唤醒(因为它无法获取锁但现在可以),那么内核必须参与执行调度操作。

于 2020-02-11T04:09:53.760 回答