「std::shared_ptr」オブジェクトの変更はスレッドセーフですか?

Patricia Arquette
リリース: 2024-11-19 17:52:03
オリジナル
900 人が閲覧しました

Is Modifying a `std::shared_ptr` Object Thread-Safe?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート