6

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

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

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

4

1 回答 1

2

如果我正确阅读了您的问题,请[res.on.data.races]保护不同的切片不参与数据竞赛,在

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

[container.requirements.dataraces]valarray对严格缺乏的不同元素的修改增加了额外的保护。

于 2018-07-02T14:33:37.237 回答