Для 1 см. Мой ответ здесь :
§ 23.2.2 Гонки контейнерных данных
2 / Несмотря на (17.6.5.9), реализации должны избегать гонок данных, когда содержимое содержимого объекта в различных элементах в одной и той же последовательности, за исключением vector<bool>
, изменяется одновременно.
Очевидно, что это C ++ 11 (так как C ++ 98/03 не упоминал о потоках), однако большинство реализаций уже соответствует.
Боюсь, я не знаю никаких соглашений. OpenMP, вероятно, может автоматизировать это.
Чтобы сделать это вручную, я бы, вероятно, использовал систему, похожую на очередь, поскольку не всем объектам может потребоваться одно и то же время, вы могли бы закончить один поток намного быстрее, чем другие, если бы вы разделялись на «равные» части, тогда как очередь подача потоков облегчит эту проблему, увеличив параллелизм вплоть до самого конца.