Безопасно ли изменять элементы std :: valarray <T>одновременно? - PullRequest
0 голосов
/ 02 июля 2018

Если я правильно понял, начиная с C ++ 11 было безопасно вызывать константные функции-члены контейнера одновременно и изменять элементы контейнера, пока сам контейнер не изменяется как часть операции ( как видно из таблицы, касающейся безопасности потоков в cppreference.com ). Поскольку std :: valarray не указан в разделе «контейнеры» (черновика) стандарта, я не уверен, применима ли к нему безопасность потоков. Другими словами,

  • Безопасно ли читать из std :: valarray одновременно (в частности, используя оператор [] со слайсами)?
  • Безопасно ли изменять элементы std :: valarray одновременно, если операция над T безопасна?

Я хотел бы использовать std :: valarray для многомерного массива чисел, который будет заполнен несколькими потоками.

1 Ответ

0 голосов
/ 02 июля 2018

Если я правильно читаю ваш вопрос, [res.on.data.races] защищает отдельные срезы от участия в гонках данных, под

Функция стандартной библиотеки C ++ не должна прямо или косвенно доступ к объектам, доступным потокам, отличным от текущего потока если объекты не доступны прямо или косвенно через аргументы функции, включая this.

[container.requirements.dataraces] добавляет дополнительную защиту вокруг модификаций отдельных элементов, которых строго valarray не хватает.

...