【发布时间】:2018-09-13 16:00:51
【问题描述】:
假设我有以下代码:
#include<concurrent_unordered_map.h>
struct firstStruct {
<irrelevant code>
}
struct secondStruct {
void func(){
<CRITICAL CODE>
}
}
假设我有这个:
concurrent_unordered_map<firstStruct,secondStruct> cmap = ...
让我们假设cmap 已被填充,并且firstStruct f 和secondStruct s 是(key,value) 对(f,s) 存在于cmap 中。
如果我使用下面的代码 sn-p
cmap[f].func();
从secondStruct s 执行func() 中的<CRITICAL CODE> 是否是线程安全的?
另外,如果我有以下代码 sn-ps,可能会在不同线程中同时执行,会发生什么?
cmap[f].func();
和
SecondStruct s2 = ... ;
cmap[f] = s2;
如果(key,value)对(f,s)被一个线程更改为(f,s2),如果另一个线程恰好正在执行<CRITICAL CODE>会发生什么?
【问题讨论】:
标签: c++ multithreading visual-studio concurrency thread-safety