我有一个 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/