问题描述
我的应用程序有6个线程,它们共享一个公用indv
,t1,t2和t3是写程序,它们遍历向量,调用Data[rep(1:.N,each = 5)][,c("s","draw") := list(1:.N,rnorm(.N)),by = .(firm,indv)]
,并在该特定索引处修改引用。线程t4,t5,t6是读取器,它们周期性地遍历向量,读取每个索引处的值,并对它们执行操作。
例如t1,t2,t3:
tbb::concurrent_vector
然后是t4,t5,t6
tbb::concurrent_vector< T,A >::operator[](size_type index)
我的问题是,如果在t4遍历所有元素的过程中t1修改向量,那么迭代器会发生什么?迭代器是否无效?如果不是,则t4预期会看到什么值,更新后的值还是更新前的值?
struct my_struct仅包含整数,向量为固定大小。
解决方法
根据代码,您只能修改vector的元素,而不能修改vector。如果是这样,则迭代器不会无效。通过operator []访问期间没有什么特别的,其中没有隐藏的锁。因此,当仅my_struct
的一部分被更新时,t4可能会看到旧值,新值或介于两者之间的值。