ホームページ >バックエンド開発 >C++ >``を使用せずにC 11でスレッドセーフなシングルトンを作成できますか?

``を使用せずにC 11でスレッドセーフなシングルトンを作成できますか?

DDD
DDDオリジナル
2024-10-30 02:34:29293ブラウズ

Can You Create a Thread-Safe Singleton in C  11 Without Using ``?

を使用せずに C 11 でマルチスレッドセーフなシングルトンを実装する方法

はじめに

C 11 でのスレッドセーフ シングルトンの実装は、マルチスレッドの導入以来議論のテーマとなってきました。ミューテックスはスレッド セーフを実現する簡単な方法を提供しますが、パフォーマンスのオーバーヘッドが発生する可能性があります。この記事では、ミューテックスを使用せずにマルチスレッドセーフなシングルトンを実装する別のアプローチについて説明します。

同時待機による遅延初期化

C 11 では、実装を簡素化する新しい言語機能が導入されています。遅延初期化の。静的ローカル変数がすでに初期化されている場合、同時実行は待機するようになり、手動ロックの必要がなくなります。

実装

シングルトン インスタンスを取得する単純な静的関数次のように実装できます:

<code class="cpp">static Singleton& get() {
  static Singleton instance;
  return instance;
}</code>

コンパイラが標準を適切に実装している限り、この関数は C 11 で正しい動作を提供します。

シングルトンの禁止

この簡略化された実装にもかかわらず、著者はシングルトンの使用は一般的に推奨されないことを強調しています。シングルトンには固有の制限があるため、シングルトンを完全に避けることを推奨しています。

追加メモ

  1. 元のコードで言及されているclear() 関数は、テストとテストに使用されます。現実世界のシングルトン実装には含めるべきではありません。
  2. 専門家が提供した応答ではアトミック ライブラリが参照されていません。
  3. 質問に含まれるコード例は、応答。

以上が``を使用せずにC 11でスレッドセーフなシングルトンを作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。