设计思路
- 使用互斥锁(
std::mutex
)来保护对静态成员变量 sharedData
的访问。在进入 updateSharedData
函数时,锁定互斥锁,离开函数时解锁,这样可以防止多个线程同时访问和修改 sharedData
。
- 为了简化锁的管理,使用
std::lock_guard
或 std::unique_lock
来自动管理锁的生命周期,避免手动忘记解锁的风险。
代码实现
#include <iostream>
#include <mutex>
#include <thread>
class Worker {
public:
static int sharedData;
static std::mutex mtx;
void updateSharedData(int value) {
std::lock_guard<std::mutex> lock(mtx);
sharedData += value;
}
};
int Worker::sharedData = 0;
std::mutex Worker::mtx;
void workerFunction(Worker& worker, int value) {
worker.updateSharedData(value);
}
int main() {
Worker worker;
std::thread t1(workerFunction, std::ref(worker), 10);
std::thread t2(workerFunction, std::ref(worker), 20);
t1.join();
t2.join();
std::cout << "Final sharedData value: " << Worker::sharedData << std::endl;
return 0;
}