C++ atomic_flag与自旋锁实现
请说明std::atomic_flag的特性,并用它实现一个简单的自旋锁。
回答
Yahuda
std::atomic_flag是最简单的原子布尔类型,保证无锁(lock-free),始终是原子的。它只有test_and_set()和clear()两个操作。
自旋锁实现:
class SpinLock {
std::atomic_flag flag = ATOMIC_FLAG_INIT;
public:
void lock() {
while (flag.test_and_set(std::memory_order_acquire));
}
void unlock() {
flag.clear(std::memory_order_release);
}
};
适合短临界区,避免线程切换开销,但不适合长时间等待。