在C++ 11中使用:: new的线程安全性

Mar*_*ark 12 c++ concurrency multithreading c++11

我确信,在实践中,使用::new是线程安全的.我的问题是标准的哪一部分提供了保证,如果有的话?这是一个惯例吗?这是标准为实现提供了很多自由度(比如关于每种数据类型的相对宽松的约束)以支持各种硬件的东西吗?

我希望C++ 11标准中只有一行明确指定" ::new必须是线程安全的实现".

我也很想看到一些关于操作员新过载的线程安全性的标准.我想,他们也需要被需要是线程安全的,但这些功能还没有下全面担保属于这一常量=>线程安全(在C++ 11).

谢谢!

Cou*_*per 13

我相信这是C++ 11标准隐含的保证.如果不是,则使用运算符new或new表达式可能会导致数据竞争,并且标准不允许这样做.供参考,参见§17.6.5.9数据竞争规避以及

18.6.1.4数据竞争[new.delete.dataraces]

"运营商新的运营商的库版本删除,全球运营商新的运营商的用户更换版本删除,和C标准库函数释放calloc,malloc的,realloc的,和自由,不得作为并发呼叫的结果引进的数据竞争(1.10)来自不同线程的调用分配或取消分配特定存储单元的这些函数的调用应该在一个总的顺序中进行,并且每个这样的解除分配调用应该在下一个分配(如果有的话)之前按此顺序进行."

您自己的覆盖或您自己的全球运营商替代品也满足此要求.

另见该提案N3664"澄清内存分配",它更加强调这一点.