假设我们有一个spinlock
的实现:
struct Lock {
locked : Atomic(bool),
}
然后解锁功能可以是:
fun unlock(lock : &Lock) {
atomic_store(&lock.locked, false, release);
}
但是,什么lock
? 通常,它采用了比较并交换这样的:
fun lock(lock : &Lock) {
while atomic_compare_and_swap(&lock.locked, false, true, acquire) {}
}
但不会交换够吗? 事情是这样的:
fun lock(lock : &Lock) {
while atomic_swap(&lock.locked, true, acquire) {}
}
是否有任何问题吗?