我有一个std :: map myMap和一个std :: atomic myLock.
写是:
if(myLock == 0)
{
myLock++;
myMap.insert(key, value);
myLock--;
}
Run Code Online (Sandbox Code Playgroud)
如果我在没有从另一个线程锁定的情况下做这样的事情,这被认为是未定义的行为吗?关键是,我不介意结果是否不准确(即迭代过后我更新的地图中的值).我只是不想崩溃.
MyConstIterator endIt = mMap.cend();
for(MyConstIterator it = myMap.cbegin(); it != endIt; ++it)
{
}
Run Code Online (Sandbox Code Playgroud)
我试图在没有互斥锁的情况下实现锁定更少的读取,但我知道std :: map不是线程安全的.我是否必须添加原子锁以避免崩溃?
使用锁定不会使您的地图线程安全.两个线程可以读取myLock == 0并进入支撑.
你需要一个互斥量. 关于锁定的这个答案可能是有用的.