我有一个std::vector<...>被两个线程共享。
它们都调用vec->size();
这可能是竞争条件的源吗?我希望不是,因为vec->size()是const。
谢谢!
如果您只调用 vec->size()
方法,则是安全的。但这很难相信。一旦调用了任何更改方法,例如 push_back
,竞争就可能导致获得错误的大小。
.end
- .begin
。那么当一个线程执行push_back操作时会发生什么呢?它显然会通过成员影响大小并改变内存。但是没有内存屏障。其他核心上的线程将只看到旧的内存。因此,当它们调用size()
时,它将使用旧值进行计算。
size()
实现为size_type size() const { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
。 - kennytm