假设我们有一个
然后,解锁功能可以是这样的:
但是仅仅进行交换是否就足够了呢?像这样的操作:
```python a, b = b, a ```
是不是就可以了呢?
自旋锁
实现: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) {}
}
但是仅仅进行交换是否就足够了呢?像这样的操作:
```python a, b = b, a ```
是不是就可以了呢?
fun lock(lock : &Lock) {
while atomic_swap(&lock.locked, true, acquire) {}
}
这个有问题吗?