C++ std::mutex如何使用
导读:在C++中,std::mutex用于实现互斥访问共享资源,以避免多个线程同时访问造成的竞争条件。可以通过以下步骤来使用std::mutex: 包含头文件: #include <mutex> 创建std::mutex对象:...
在C++中,std::mutex用于实现互斥访问共享资源,以避免多个线程同时访问造成的竞争条件。可以通过以下步骤来使用std::mutex:
- 包含头文件:
#include <
mutex>
- 创建std::mutex对象:
std::mutex mtx;
- 在需要进行互斥访问的代码块中使用std::lock_guardstd::mutex来锁定mutex:
{
std::lock_guard<
std::mutex>
lock(mtx);
// 访问共享资源的代码
}
- 当std::lock_guard对象超出作用域时,mutex会自动释放锁。
下面是一个简单的示例,演示了如何使用std::mutex来保护共享资源的访问:
#include <
iostream>
#include <
thread>
#include <
mutex>
std::mutex mtx;
int sharedData = 0;
void incrementData() {
std::lock_guard<
std::mutex>
lock(mtx);
sharedData++;
}
int main() {
std::thread t1([](){
for (int i = 0;
i <
1000;
i++) {
incrementData();
}
}
);
std::thread t2([](){
for (int i = 0;
i <
1000;
i++) {
incrementData();
}
}
);
t1.join();
t2.join();
std::cout <
<
"Final value of sharedData: " <
<
sharedData <
<
std::endl;
return 0;
}
在这个示例中,我们创建了一个std::mutex对象mtx来保护共享变量sharedData的访问。两个线程分别调用incrementData函数来增加sharedData的值,由于我们使用了std::lock_guardstd::mutex来锁定mutex,在访问共享资源时会确保只有一个线程能够访问,从而避免竞争条件。最后输出sharedData的最终值。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: C++ std::mutex如何使用
本文地址: https://pptw.com/jishu/684316.html