可能重复:
C++: std::string in a multi-threaded program
Is std::string thead-safe with gcc 4.3?
大家好,
假设我们将对象的引用传递给线程过程,稍后我们修改该对象。这里我们有数据竞争,所以为了避免最好按值传递对象。现在它看起来很安全,但它真的安全吗?如果对象的类型为std::string
,该怎么办?有些编译器使用写时复制语义实现std::string
,因此不会复制实际数据,而是指它们都引用相同的数据。在其中一个对象上调用修改器函数时,将完成实际复制。现有的C ++标准允许这样的实现,但是现有的标准没有说多线程,所以允许这种实现不是线程安全的。是吗?
您对这种解决方案有什么看法?
std :: string x =“blablabla; std :: strinc copy_of_x = x.c_str();
感谢。
答案 0 :(得分:0)
这是依赖于实现的。查看标准库的文档:单线程和多线程应用程序可能有单独的实现。另外,我不能指出任何合理的现代C ++平台,它不支持多线程。