自旋锁:
例如用atomic_flag + while循环来实现,它阻塞时会占用cpu。
class spin_lock {
private:
atomic_flag flag;
public:
spin_lock() = default;
spin_lock(const spin_lock&) = delete;
spin_lock& operator=(const spin_lock) = delete;
void lock() { //acquire spin lock
while (flag.test_and_set());
}
void unlock() { //release spin lock
flag.clear();
}
};
互斥锁:
例如std::mutex globalMutex,它阻塞时会退出cpu。
globalMutex.lock();
globalMutex.unlock();
或者:
std::lock_guard<std::mutex> lock(globalMutex);
思考个问题,上面的自选锁,如果不用while循环,改成什么就可以不占cpu?