互斥锁(mutex):
自旋锁(spin lock):
如果锁粒度比较小,等待锁开销比使用互斥锁开销小,建议使用自旋锁,反之,使用互斥锁
此自旋锁过lock-free的std::atomic_flag实现
#ifndef _SPINLOCK_H_
#define _SPINLOCK_H_
#include <atomic>
class SpinLock final{
public:
SpinLock();
~SpinLock();
void lock();
void unlock();
SpinLock(const SpinLock& rhs) = delete;
SpinLock(SpinLock&& rhs) = delete;
SpinLock& operator=(const SpinLock& rhs) = delete;
SpinLock& operator=(SpinLock&& rhs) = delete;
private:
std::atomic_flag m_lock = ATOMIC_FLAG_INIT;
};
#endif // !_SPINLOCK_H_
#include "SpinLock.h"
SpinLock::SpinLock(){
}
SpinLock::~SpinLock(){
}
void SpinLock::lock(){
while(m_lock.test_and_set(std::memory_order_acquire));
}
void SpinLock::unlock(){
m_lock.clear(std::memory_order_release);
}
原文:https://www.cnblogs.com/Keeping-Fit/p/14961258.html