ホームページ > バックエンド開発 > C++ > C 11 の「const」はスレッドの安全性を保証しますか?

C 11 の「const」はスレッドの安全性を保証しますか?

DDD
リリース: 2024-12-20 20:59:10
オリジナル
859 人が閲覧しました

Does `const` in C  11 Guarantee Thread Safety?

C 11 で 'const' はスレッドの安全性を意味しますか?

はじめに

C 11 で 'const' を使用するとスレッドが保証されると広く信じられています安全性。ただし、この概念にはさらなる明確化が必要です。

主張の明確化

'const' だけではスレッドの安全性は保証されませんが、'const' オブジェクトの操作がスレッド安全であるという標準ライブラリの期待は満たされます。安全。具体的には:

  • 「const」とマークされた操作は完全に読み取り (書き込みなし) で構成されるか、内部的に書き込みを同期する必要があります。
  • 標準ライブラリは、内部の「const」オブジェクトに対する操作はすべて、非競合であること (非 const 引数が同時実行性を処理する限り)。
  • If型の「const」オブジェクトに対する操作はこの期待に違反し、その型を標準ライブラリで使用すると、データ競合や未定義の動作が発生する可能性があります。

Const Does Not Equal Java's Synchronized

とは異なりますJava の 'synchronized'、'const' は本質的に同期を提供しません。次の例を考えてみましょう。

  • 'area()' 関数は読み取りのみで書き込みは行わないため、スレッドセーフです。
  • ただし、'rect' 自体はスレッドセーフではありません。によって実行される書き込み操作を同期しないため、スレッドセーフです。 'set_size()'.

'const' による条件付きスレッド セーフティ

書き込みでスレッド セーフティのために 'const' を適切に利用するには、可変状態 (キャッシュ領域の値など) が必要です以下に示すように、同期プリミティブによって保護される必要があります。

にもかかわらず'area()' はスレッドセーフですが、'rect' は 'set_size()' での書き込みが保護されていないため、依然として非スレッドセーフのままです。

キーワード不足

C 開発者による主張この言語にはその誕生以来、予約語の数が限られているため、キーワードが不足しているというのは真実です。

以上がC 11 の「const」はスレッドの安全性を保証しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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