如果我正确理解,自C ++ 11起,只要不将容器本身作为操作的一部分进行修改,就可以安全地同时调用容器的const成员函数并修改容器的元素(从cppreference.com中有关线程安全的表中可以看出)。由于std :: valarray未在(草稿)标准的容器部分中列出,因此我不确定线程安全性是否也适用于它。换句话说,
我想将std :: valarray用于将要使用多个线程填充的数字多维数组。
答案 0 :(得分:2)
如果我正确阅读了您的问题,则[res.on.data.races]
保护
C ++标准库函数不得直接或间接 访问可由当前线程以外的线程访问的对象 除非对象直接或间接地通过 函数的参数,包括
this
。
[container.requirements.dataraces]
为对valarray
严格缺乏的独特元素的修改提供了额外的保护。