繁体   English   中英

在MacOSX上,使用g ++,std :: vector .size()线程安全吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM