基础能力-加解锁

xiaoxiao2021-02-28  62

关于加解锁的两种实现方式

方案一:使用C++11 atomic_flag原子特性实现细粒度加解锁 #ifndef YAGER_MUTEX_H #define YAGER_MUTEX_H #include <atomic> class CYagerMutex { public: CYagerMutex() : m_atomicFlag(ATOMIC_FLAG_INIT) {} ~CYagerMutex() {} void Lock() { while (m_atomicFlag.test_and_set()); } void UnLock() { m_atomicFlag.clear(); } private: std::atomic_flag m_atomicFlag; }; #endif //YAGER_MUTEX_H 方案二:使用libuv的mutex,实现粗粒度的加解锁 #include "libuv/include/uv.h" class CYagerMutex { public: CYagerMutex() { uv_mutex_init(&m_mutex); } ~CYagerMutex() { uv_mutex_destroy(&m_mutex); } void Lock() { uv_mutex_lock(&m_mutex); } void UnLock() { uv_mutex_unlock(&m_mutex); } private: uv_mutex_t m_mutex; };

关于加解锁的两种实现方式

方案一:使用C++11 atomic_flag原子特性实现细粒度加解锁 #ifndef YAGER_MUTEX_H #define YAGER_MUTEX_H #include <atomic> class CYagerMutex { public: CYagerMutex() : m_atomicFlag(ATOMIC_FLAG_INIT) {} ~CYagerMutex() {} void Lock() { while (m_atomicFlag.test_and_set()); } void UnLock() { m_atomicFlag.clear(); } private: std::atomic_flag m_atomicFlag; }; #endif //YAGER_MUTEX_H 方案二:使用libuv的mutex,实现粗粒度的加解锁 #include "libuv/include/uv.h" class CYagerMutex { public: CYagerMutex() { uv_mutex_init(&m_mutex); } ~CYagerMutex() { uv_mutex_destroy(&m_mutex); } void Lock() { uv_mutex_lock(&m_mutex); } void UnLock() { uv_mutex_unlock(&m_mutex); } private: uv_mutex_t m_mutex; };
转载请注明原文地址: https://www.6miu.com/read-75418.html

最新回复(0)