[英]On MacOSX, using g++, is std::vector .size() thread safe?
我有一个std :: vector <...>在两个线程中共享。
他们两个都调用vec-> size();。
这可以成为比赛条件的来源吗? 我不希望因为vec-> size()是const。
谢谢!
如果仅调用vec->size()
,则很安全。 但这很难相信。 一旦您调用任何更改方法(例如push_back
,竞赛都可能导致获得错误的大小。
可能不会。 问题实际上不在vec-> size()中,在所有其他函数中也是如此。
考虑一下:vector :: size()通常直接从成员(例如.end
- .begin
)计算得出。 现在在一个线程上使用push_back会发生什么? 显然,它会通过成员影响大小。 它会更改内存。 但是没有记忆障碍。 其他内核上的其他线程只会看到旧的内存。 结果,当他们调用size()
,将使用旧值进行计算。
一个明显的例外是当创建线程后向量不改变大小时。 线程将永远不会过时的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.