同时修改std :: valarray <t>的元素是否安全?

时间:2018-07-02 14:03:42

标签: c++ multithreading c++11 valarray

如果我正确理解,自C ++ 11起,只要不将容器本身作为操作的一部分进行修改,就可以安全地同时调用容器的const成员函数并修改容器的元素(从cppreference.com中有关线程安全的表中可以看出)。由于std :: valarray未在(草稿)标准的容器部分中列出,因此我不确定线程​​安全性是否也适用于它。换句话说,

  • 同时读取std :: valarray是否安全(特别是通过对切片使用operator [])?
  • 如果对T的操作安全,同时修改std :: valarray 的元素是否安全?

我想将std :: valarray用于将要使用多个线程填充的数字多维数组。

1 个答案:

答案 0 :(得分:2)

如果我正确阅读了您的问题,则[res.on.data.races]保护

下的分片免受数据争夺。
  

C ++标准库函数不得直接或间接   访问可由当前线程以外的线程访问的对象   除非对象直接或间接地通过   函数的参数,包括this

[container.requirements.dataraces]为对valarray严格缺乏的独特元素的修改提供了额外的保护。