【发布时间】:2018-01-03 13:33:51
【问题描述】:
我有几个线程写在一个向量中。不同的线程可能会尝试写入相同的字节。没有读取。我可以像示例中那样只使用atomic_fecth_or(),这样向量就会变得线程安全吗?它使用 GCC 编译,没有错误或警告。
std::vector<std::atomic<uint8_t>> MapVis(1024*1024);
void threador()
{
...
std::atomic_fetch_or(&MapVis[i], testor1);
}
【问题讨论】:
-
我看不出这种方法行不通的任何原因,但尝试为每个线程提供一个向量实例(包含常规
uint8_t)然后合并结果。 -
向量有一个固定大小,只有在运行时才知道。
-
我无法在线程之间划分向量,因为它表示几何位映射(矩形)。线程在不同的区域工作,但在边界,它们可以共享一些字节。
-
“如果你读取对象或写入不同的对象,从多个线程访问 std::vector 是完全可以的”。正如@VTT 在上面的评论中所建议的那样。
标签: c++ multithreading vector thread-safety