可以使用std::thread和std::mutex来创建两个线程,一个用于读取值,一个用于修改值。具体实现如下
#include <memory>
#include <thread>
#include <mutex>
#include <iostream>
using namespace std;
class A {
private:
int x;
mutex m;
public:
A(int _x) : x(_x) {};
int get() {
lock_guard<mutex> lock(m);
return x;
}
void set(int y) {
lock_guard<mutex> lock(m);
x = y;
}
};
int main() {
shared_ptr<A> p1 = make_shared<A>(1);
shared_ptr<A> p2(p1);
// 线程1:通过p1使用get()读取值
thread t1([&](){
while (true) {
int x = p1->get();
cout << "Thread 1 read value: " << x << endl;
}
});
// 线程2:使用p2通过set()修改值
thread t2([&](){
int x = 0;
while (true) {
p2->set(x++);
cout << "Thread 2 set value: " << x << endl;
}
});
t1.join();
t2.join();
return 0;
}
在A类中使用了一个互斥锁std::mutex来保护共享资源x,防止多个线程同时访问和修改造成数据竞争问题。线程1通过p1调用get()方法读取值,线程2通过p2调用set()方法修改值。在main()函数中创建了两个线程t1和t2,分别运行读取和修改操作,通过调用join()等待线程结束。