std::shared_ptr スレッド セーフティ
ドキュメントには、複数のスレッドが異なる std::shared_ptr オブジェクトを安全に読み書きできると記載されています。これらは共有所有権を持つコピーを表します。ただし、これは、shared_ptr オブジェクトの変更が本質的に安全であることを意味するものではありません。
明確にするために、std::shared_ptr のスレッド安全性の保証は、共有所有権を追跡する制御ブロックの管理にのみ適用されます。複数のshared_ptrインスタンス。 shared_ptr の内容 (それが指すオブジェクトを含む) は、本質的にスレッドセーフではありません。
たとえば、前述のコードは期待どおりに動作しない可能性があります。
shared_ptr<myClass> global = make_shared<myClass>(); ... // In thread 1 shared_ptr<myClass> private = global; ... // In thread 2 global = make_shared<myClass>(); ...
この例では、このシナリオでは、スレッド 1 のプライベートがグローバルの元の値または更新された値を維持することは保証されません。これは、スレッド 2 でのグローバルの値の変更はスレッドセーフではなく、未定義の動作を引き起こす可能性があるためです。
複数のスレッドによってアクセスされるshared_ptr インスタンスの有効性を保証するには、std などの同期メカニズムを採用する必要があります。 ::mutex、コードの重要なセクションを保護します。 shared_ptr オブジェクトのコンテンツを非スレッドセーフとして扱い、適切な同期技術を使用して共有リソースへの同時アクセスを保護することが重要です。
以上が「std::shared_ptr」オブジェクトの変更はスレッドセーフですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。