我理解线程安全的概念。在尝试保护单个变量时,我正在寻找简化线程安全的建议。
假设我有一个变量:
double aPass;
我想保护这个变量,所以我创建了一个互斥锁:
pthread_mutex_t aPass_lock;
现在有两种我能想到的好方法,但它们都有令人讨厌的缺点。首先是创建一个线程安全的类来保存变量:
class aPass {
public:
aPass() {
pthread_mutex_init(&aPass_lock, NULL);
aPass_ = 0;
}
void get(double & setMe) {
pthread_mutex_lock(aPass_lock);
setMe = aPass_
pthread_mutex_unlock(aPass_lock);
}
void set(const double setThis) {
pthread_mutex_lock(aPass_lock);
aPass_ = setThis;
pthread_mutex_unlock(aPass_lock);
}
private:
double aPass_;
pthread_mutex_t aPass_lock;
};
现在这将保持aPass
完全安全,没有什么是错误的,永远不要碰它,耶!然而,看看那些乱七八糟的东西,想象一下访问它时的混乱。总的。
另一种方法是让它们都可以访问,并确保在使用 aPass 之前锁定互斥锁。
pthread_mutex_lock(aPass_lock);
do something with aPass
pthread_mutex_unlock(aPass_lock);
但是,如果项目中有新人加入,如果您忘记锁定它会怎样。我不喜欢调试线程问题,它们很难。
有没有一个好方法(使用pthreads,因为我必须使用几乎没有提升支持的QNX)锁定单个变量而不需要一个大类,这比创建一个互斥锁更安全吗?