Наверное, нет. Проблема не в vec-> size (), а во всех других функциях.
Учтите это: vector :: size () обычно вычисляется непосредственно из членов, например .end
- .begin
. Теперь, что происходит с push_back в одном потоке? Это влияет на размер, очевидно, через членов. Это меняет память. Но нет барьера памяти. Другие потоки на других ядрах просто увидят старую память. В результате, когда они вызывают size()
, он будет рассчитываться с использованием старых значений.
Очевидным исключением является случай, когда вектор не меняет размер после создания потоков. В потоках никогда не будет устаревшей информации.