【发布时间】:2021-01-12 22:29:12
【问题描述】:
鉴于受 Mutex 保护的共享数据。在不需要锁定互斥锁的情况下读取部分共享数据的适当方法是什么?如下例所示,使用 std::atomic_ref 是否合适?
struct A
{
std::mutex mutex;
int counter = 0;
void modify()
{
std::lock_guard<std::mutex> guard(mutex);
// do something with counter
}
int getCounter()
{
return std::atomic_ref<int>(counter).load();
}
};
【问题讨论】:
-
构造一个临时的
atomic_ref绝对没用。你想做什么具体的实际事情?您为什么不想锁定互斥锁,您希望互斥锁用于什么目的?您需要哪些安全保证? -
想一想:它可能与在任何地方都不是原子的
long long long int一起工作吗?它显然不会。
标签: c++ thread-safety locking mutex atomic