#include <atomic>
#include <mutex>
template<typename T> // 构造一个模板类,当在函数内部定义时, 构造时,进行加锁,析构时,进行解锁,
class Lock { // 这个办法,可以解决在异常时,能准确地解锁,因为异常时,类也会进行析购,然后才轮到异常
public:
Lock(T& mmutex) : m_mutex(mmutex) { m_mutex.lock(); } // 类名(初始化类型 a) : 私有变量赋值(a) { 功能实现 }
~Lock()
{
m_mutex.unlock();
}
private:
T &m_mutex; // 定义为引用
};
class Counter
{
public:
Counter() : m_count(0),m_count2(0) {}
~Counter() {}
void addcount() {
Lock<std::mutex> lock(m_muter);// 这样子定义,则整个函数会加锁,解锁
m_count++;
}
void addcount2() {
Lock<std::mutex> lock(m_muter);
m_count2++;
}
int Getcount() const {
if (m_count % 50000 == 0)
{
std::cout << "m_count 被 5000 整除" << std::endl;
return 0;
}
return 1;
}
int Getcount2() const {
if (m_count2 % 10000 == 0)
{
std::cout << "Getcount2 被 10000 整除" << std::endl;
return 0;
}
return 1;
C++ 11 多线程 mutex (一) 巧用类结构进行加锁,解锁
最新推荐文章于 2024-07-31 14:05:34 发布
本文详细介绍了C++11中多线程环境下如何巧妙地在类结构中使用mutex进行同步,探讨了加锁和解锁的最佳实践,确保线程安全。
摘要由CSDN通过智能技术生成