【发布时间】:2016-02-10 14:07:35
【问题描述】:
我知道可以从std::vector 并发读取而不会产生“坏”后果,因为此操作可以被认为是线程安全的。
但是对于写操作却不能这么说。但是,我想知道这是否总是正确的,例如考虑到我的特定情况。
我有一个std::vector<bool>,其中所有元素都初始化为false,并且,给定一个索引数组,我需要从false 更改这些元素的值(每个索引的vector[index])到true。
如果我为每个索引使用不同的线程(并且某些索引可能具有相同的值),这个操作是否可以被认为是线程安全的?
如果向量是std::vector<int>(或任何原始类型)并且分配的值始终相同(例如 1),是否仍可以认为此操作是线程安全的?
【问题讨论】:
-
并发访问时向量的大小是否不变?
-
@decltype_auto 是的,向量的大小保持不变。
-
那么,给定“索引数组”,具有indirect_array 访问权限的 std::valarray
可能适合您。但这与您的并发主题无关。 -
@CraigEstey 请注意,这个问题更具体。
标签: c++ multithreading c++11 vector