C++ 在类中创建一个线程,并在线程中修改累的成员属性
时间: 2024-10-04 11:01:28 浏览: 26
在C++中,你可以使用`std::thread`库来创建一个新的线程,然后通过成员函数来操作类的成员变量。首先,你需要确保该成员变量是线程安全的,即它应该有适当的同步机制,如互斥锁(`std::mutex`)。
下面是一个简单的例子:
```cpp
#include <iostream>
#include <thread> // 包含线程库
#include <mutex> // 包含互斥锁
class Counter {
public:
int count;
std::mutex mtx; // 互斥锁用于保护count
void increment() { // 成员函数,负责增加计数
std::lock_guard<std::mutex> lock(mtx); // 获取锁
++count;
std::cout << "Incrementing counter to: " << count << std::endl;
}
};
int main() {
Counter c;
std::thread worker(&Counter::increment, &c); // 使用引用传递给新线程
// 主线程在此期间做其他事情...
for (int i = 0; i < 5; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟工作
}
// 线程结束前先等待
worker.join();
return 0;
}
```
在这个例子中,`increment()`方法被传递给线程`worker`,并在运行时修改`counter`的值。`std::lock_guard`确保了对`count`的访问是互斥的,避免了数据竞争。
阅读全文