原子指令是否涉及内核
does the atomic instruction involve the kernel
我正在阅读此 link 以了解 Linux 的 futex
。这是我不明白的地方。
In order to acquire the lock, an atomic test-and-set instruction (such
as cmpxchg()) can be used to test for 0 and set to 1. In this case,
the locking thread acquires the lock without involving the kernel (and
the kernel has no knowledge that this futex exists). When the next
thread attempts to acquire the lock, the test for zero will fail and
the kernel needs to be involved.
不太明白为什么"acquires the lock without involving the kernel"。
我一直认为原子指令,比如test-and-set
,总是涉及到内核。
那么为什么第一次获取锁不会涉及到内核呢?更具体地说,原子指令必须或可能涉及内核?
原子测试和设置指令只是用户代码正常执行的普通指令。不涉及内核。
Futexes 提供了一种有效的方式来执行锁定和解锁操作,而无需在快速路径中涉及内核。但是,如果一个进程需要进入睡眠状态(等待获取锁)或唤醒(因为它无法获取锁但现在可以),那么内核就必须参与执行调度操作。
我正在阅读此 link 以了解 Linux 的 futex
。这是我不明白的地方。
In order to acquire the lock, an atomic test-and-set instruction (such as cmpxchg()) can be used to test for 0 and set to 1. In this case, the locking thread acquires the lock without involving the kernel (and the kernel has no knowledge that this futex exists). When the next thread attempts to acquire the lock, the test for zero will fail and the kernel needs to be involved.
不太明白为什么"acquires the lock without involving the kernel"。
我一直认为原子指令,比如test-and-set
,总是涉及到内核。
那么为什么第一次获取锁不会涉及到内核呢?更具体地说,原子指令必须或可能涉及内核?
原子测试和设置指令只是用户代码正常执行的普通指令。不涉及内核。
Futexes 提供了一种有效的方式来执行锁定和解锁操作,而无需在快速路径中涉及内核。但是,如果一个进程需要进入睡眠状态(等待获取锁)或唤醒(因为它无法获取锁但现在可以),那么内核就必须参与执行调度操作。