CodeWalk

C++ atomic_flag与自旋锁实现

作者:Yahuda · 2026-05-30 12:55

请说明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);
    }
};

适合短临界区,避免线程切换开销,但不适合长时间等待。