我知道可以从 std::vector 并发读取而不会产生不良"后果,因为该操作可以被认为是线程安全的.
但是对于写操作就不能这样说了.但是,我想知道这是否并不总是正确的,例如考虑到我的特定情况.
我有一个 std::vector
如果我为每个索引使用不同的线程(并且有可能某些索引具有相同的值),该操作是否可以被认为是线程安全的?
如果向量是 std::vector
我知道可以从 std::vector 并发读取而不会产生不良"后果,因为该操作可以被认为是线程安全的.
但是对于写操作就不能这样说了.但是,我想知道这是否并不总是正确的,例如考虑到我的特定情况.
我有一个 std::vector
如果我为每个索引使用不同的线程(并且有可能某些索引具有相同的值),该操作是否可以被认为是线程安全的?
如果向量是 std::vector
并发写入 vector
在不同步的情况下使用多个线程时,可能会发生以下情况:线程 1 应该更新一点,并读取包含它的字节.然后线程 2 读取同一个字节,然后线程 1 更新一个位并将该字节写回,然后线程 2 更新另一个位并将该字节写回,覆盖线程 1 的编辑.
这只是一种可能的情况,还有其他情况会导致相同类型的数据损坏.
在vector
如果其中一个修改了内存位置而另一个读取或修改了相同的内存位置,则两个表达式计算会发生冲突.——intro.races/2
Two expression evaluations conflict if one of them modifies a memory location and the other one reads or modifies the same memory location. – intro.races/2
因此,一旦您对来自两个不同线程的同一元素进行任何修改操作,您就会遇到竞争条件并需要适当的同步,例如通过使用 std::atomic
这篇关于同时写入 vector<bool>的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!