c++ - 从 std::map 中读取而没有写入时的原子标志

标签 c++

我有一个 std::map myMap 和一个 std::atomic myLock

写的是:

if(myLock == 0)
{
   myLock++;
   myMap.insert(key, value);
   myLock--;
}

如果我在没有从另一个线程锁定的情况下做这样的事情,这是否被认为是未定义的行为?关键是,我不介意结果是否准确(即在我迭代过去后更新 map 中的值)。我只是不想崩溃。

MyConstIterator endIt = mMap.cend();
for(MyConstIterator it = myMap.cbegin(); it != endIt; ++it)
{ 
}

我试图在没有互斥量的情况下实现无锁读取,但我知道 std::map 不是线程安全的。我是否必须添加原子锁以避免崩溃?

最佳答案

您对锁的使用不会使您的 map 线程安全。两个线程可以读取 myLock == 0 并进入你的支架。

你需要一个互斥锁。 This answer on locking may be useful .

关于c++ - 从 std::map 中读取而没有写入时的原子标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48895177/

相关文章:

python - OpenCV 概率霍夫线变换使用 C++ 和 Python 给出不同的结果?

c++ - QString::from Char Array 给出了奇怪的字符

c++ - 复制构造函数混淆

c++ - while和for循环号。已知的迭代次数

c++ - 数组衰减到指针和重载解析

c++ - 如何确定要为体系结构启用或禁用的功能标志

c++ - Win API GetUserName 返回 SYSTEM

c++ - 如何重用相同的顶点着色器来绘制不同的 gl_Position

c++ - std::list<int> 的默认构造函数可以抛出吗?

c++ - 条件不起作用,谁能解释这是为什么?