我阅读这个链接是为了了解Linux的futex。有件事我不明白。
为了获得锁,可以使用原子测试和设置指令(例如cmpxchg())测试0并将其设置为1。在这种情况下,锁定线程在不涉及内核的情况下获得锁(而且内核不知道这个futex存在)。当下一个线程试图获取锁时,对零的测试将失败,并且需要涉及内核。
我不太明白为什么“在不涉及内核的情况下获得锁”。
我一直认为原子指令(如test-and-set )总是涉及内核。
那么,为什么第一次获取锁不涉及内核呢?更具体地说,原子指令必须或可能涉及内核?
发布于 2020-02-11 04:09:53
原子测试和set指令只是用户代码正常执行的普通指令。它不涉及内核。
Futexes提供了一种有效的方法来执行锁和解锁操作,而不涉及内核的快速路径。但是,如果一个进程需要休眠(等待获得锁)或唤醒(因为它不能获得锁,但现在可以),那么内核就必须执行调度操作。
https://stackoverflow.com/questions/60161829
复制相似问题