在避免在线程安全的结构成员访问中重复编写代码的解决方法之一是使用互斥锁。互斥锁(Mutex)是一种用于保护共享资源的同步机制,它可以确保同一时间只有一个线程可以访问共享资源。
下面是一个使用互斥锁解决重复编写代码的示例:
#include
#include
class MyStruct {
private:
int value;
std::mutex mtx;
public:
void setValue(int newValue) {
std::lock_guard lock(mtx); // 使用std::lock_guard保证互斥锁自动释放
value = newValue;
}
int getValue() {
std::lock_guard lock(mtx); // 使用std::lock_guard保证互斥锁自动释放
return value;
}
};
int main() {
MyStruct myStruct;
// 线程1设置值
std::thread t1([&myStruct]() {
myStruct.setValue(42);
});
// 线程2获取值
std::thread t2([&myStruct]() {
int value = myStruct.getValue();
std::cout << "Value: " << value << std::endl;
});
t1.join();
t2.join();
return 0;
}
在上面的示例中,MyStruct
类中的setValue
和getValue
方法都使用了互斥锁mtx
来保护value
成员的访问。当一个线程在执行其中一个方法时,其他线程会被阻塞,直到互斥锁被释放。这样可以确保每次只有一个线程可以访问value
成员,避免了线程安全问题的发生。
需要注意的是,在使用互斥锁时,应该尽量减小锁的粒度,即只在必要的代码段内加锁,以避免锁的过多使用导致性能下降。