//防止同一片内存被同时修改
#include <iostream>
#include<thread>
#include<vector>
#include<algorithm>
#include<functional>
#include<mutex>
using namespace std;
struct A
{
int a;
};
std::mutex _mutex;
void func_add(A& a )
{
cout <<"add func a has address:" <<&a << endl;
for (int i = 0; i < 100000; i++)
{
std::lock_guard<std::mutex> guard(_mutex);
a.a++;
}
cout << "from add func: " << a.a << endl;
}
//这里有必要传递 引用或指针
void func_sub(A& a)
{
cout << "sub func a has address:" << &a << endl;
for (int i = 0; i < 100000; i++)
{
std::lock_guard<std::mutex> guard(_mutex);
a.a--;
}
cout << "from sub func: " << a.a << endl;
}
int main()
{
A a;
a.a = 0;
thread t_add(func_add, ref(a));
thread t_sub(func_sub, ref(a));
t_sub.join();
t_add.join();
cout << "from main func :"<< a.a<<endl;
}
C++ mutex使用
最新推荐文章于 2025-06-10 22:30:33 发布
该博客介绍了如何使用C++的互斥锁(mutex)来防止同一片内存被同时修改,通过`std::lock_guard`确保线程安全。在两个并发执行的函数`func_add`和`func_sub`中,分别对共享变量`A`的成员`a`进行增加和减少操作,最后在主线程中验证结果。示例展示了在多线程编程中防止数据竞争的重要性。
1953

被折叠的 条评论
为什么被折叠?



