Предположим, у нас есть реализация 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) {}
}
Есть ли с этим проблемы?