gpt4 book ai didi

c++ - 它是安全锁/范围保护实现吗?

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

现在我有这个从类中获取的线程安全字段的实现:

int A::GetValue() const
{
_mutex.Lock();
int temp = _value;
_mutex.Unlock();
return temp;
}

我想用这样的锁/范围守卫实现替换它(LockGuard 类只有构造函数/析构函数和 Mutex * _mutex 字段):

LockGuard::LockGuard(Mutex & mutex) : _mutex(&mutex)
{
_mutex->Lock();
}

LockGuard::~LockGuard()
{
_mutex->Unlock();
}

和重构代码:

int A::GetValue() const
{
LockGuard lockGuard(_mutex);
return _value;
}

我突然意识到我不确定这是否是一个安全的实现。是否保证首先将 _value 的拷贝传递出函数,并且只有在该拷贝已经存在的情况下, _mutex 才会被解锁?请不要提供 C++11 替代实现示例 - 我有嵌入式系统,不幸的是不能使用它们。

最佳答案

这一行有问题:

LockGuard(_mutex);

应该是:

LockGuard foo(_mutex);

否则它将超出范围并在该方法的其余部分执行之前解锁您的互斥量。 (您可以通过在 LockGuard 构造函数和析构函数以及您的调用方法中临时插入 printf 或类似代码来验证有问题的行为)。

除此之外,您的锁定模式还不错。

关于c++ - 它是安全锁/范围保护实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23797992/

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