gpt4 book ai didi

c++ - 单个变量的线程安全

转载 作者:可可西里 更新时间:2023-11-01 18:17:44 27 4
gpt4 key购买 nike

我理解线程安全的概念。在尝试保护单个变量时,我正在寻找简化线程安全的建议。

假设我有一个变量:

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)锁定单个变量而不需要大类并且比创建互斥锁更安全?

最佳答案

std::atomic<double> aPass;

前提是你有 C++11。

关于c++ - 单个变量的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13300729/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com