gpt4 book ai didi

c++ - 简单数据类型的互斥锁

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:59 25 4
gpt4 key购买 nike

我对并发还很陌生,我在决定如何使用互斥体时遇到了麻烦。目前,它们散布在我的两个线程交互的代码中。这种互斥量的使用是否合适?

class Foo
{
public:
void SetMember(int n) { AcquireMutex(..); n_ = n; ReleaseMutex(...);}
private:
Thread()
{
while(1)
{
AcquireMutex(..);
// Do something with n_
ReleaseMutex(...);
}
}
};

我有很多数据成员可以通过不同的线程从外部读取和设置,我发现跟踪所有互斥锁的获取和释放是一件令人头疼的事情。

最佳答案

不能保证原始类型的变异是线程安全的,或者更具体地说是原子的。事实上,如果你查看 <atomic> 你会注意到有几个专业,包括std::atomic_int .

来自 cppreference

Objects of atomic types are the only C++ objects that are free from data races; that is, if one thread writes to an atomic object while another thread reads from it, the behavior is well-defined.

为了具体回答您关于使用互斥量的问题,是的,您在示例中使用互斥量没问题。通常,您希望尽可能短地持有互斥量。换句话说,如果您有一个需要做大量工作的函数,只需锁定非线程安全代码周围的互斥锁,然后在代码成为线程安全代码后立即将其解锁。

关于c++ - 简单数据类型的互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31808927/

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