固定大小tbb并发向量的修改元素

问题描述

我的应用程序有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可能会看到旧值,新值或介于两者之间的值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...