0

重複の可能性:
C++: マルチスレッド プログラムの
std::string std::string は gcc 4.3 で安全ですか?

皆さんこんにちは、

オブジェクトへの参照をスレッド プロシージャに渡し、後でそのオブジェクトを変更するとします。ここではデータ競合があるため、それを回避するには、オブジェクトを値で渡す方がよいでしょう。今は安全に見えますが、本当に安全ですか?オブジェクトのタイプがstd::string. std::stringコピー オン ライト セマンティクスを実装するコンパイラがあるため、実際のデータはコピーされず、両方が同じデータを参照します。オブジェクトの 1 つで修飾子関数が呼び出されると、実際のコピーが行われます。既存の C++ 標準ではこのような実装が許可されていますが、既存の標準ではマルチスレッドについては何も述べられていないため、この実装はスレッド セーフではありません。そうですか?

この種のソリューションについてどう思いますか?

std::string x = "blablabla; std::strinc copy_of_x = x.c_str();

ありがとう。

4

1 に答える 1

0

これは実装依存です。標準ライブラリのドキュメントを確認してください。シングルスレッド アプリケーションとマルチスレッド アプリケーションの実装が異なる場合があります。率直に言って、マルチスレッドをある程度サポートしていない最新の C++ プラットフォームを指摘することはできません。

于 2011-02-15T12:31:45.583 に答える