C++的std::mutex如何绑定类中的成员函数作为线程函数,举例说明
时间: 2024-09-19 10:05:27 浏览: 38
C++11 并发指南之std::mutex详解
在C++中,`std::mutex`是一种互斥锁,用于保护共享资源免受并发访问的影响。如果你想在类中绑定一个成员函数作为线程安全的操作,可以将该成员函数与一个`std::unique_lock<std::mutex>`一起使用。下面是一个简单的例子:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
class MyClass {
public:
std::mutex myMutex; // 定义一个类成员互斥锁
void safeFunction(int value) { // 成员函数需要在锁定锁的状态下执行
std::lock_guard<std::mutex> lock(myMutex); // 使用lock_guard自动获取并释放锁
std::cout << "Thread ID: " << std::this_thread::get_id() << ", Value: " << value << std::endl;
// 这里是你的业务逻辑,例如更新数据或执行计算等
}
};
int main() {
MyClass obj;
// 创建两个线程,每个线程都会调用safeFunction,并试图获得myMutex锁
std::thread t1(obj.safeFunction, 10);
std::thread t2(obj.safeFunction, 20);
t1.join(); // 等待t1完成
t2.join(); // 等待t2完成
return 0;
}
```
在这个例子中,`safeFunction`被设计成在一个线程中执行时需要互斥访问,所以我们在进入函数前先获取了`myMutex`锁,当线程退出时,`lock_guard`会自动释放锁,确保互斥操作的原子性。
阅读全文