![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
私は今までDouble Checked Locking Patternを使ってSingletonを実装していましたが、
これがどうもスレッドセーフではないらしく、
スレッドセーフなSingletonのソースを探しています。
検索エンジンや書籍で漁っているものの奥が深いらしく、
スレッドセーフでなかったりDouble Checked Locking Patternが使われているものばかりで、
目的のものは見つかりませんでした。
C++においてスレッドセーフなSingletonを実装することは、
もしかして不可能なのでしょうか?
もしソースや方法をご存知の方がいらっしゃればお教えいただけると助かります。
よろしくお願いします
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ご回答ありがとうございます。
static変数だと衝突はしなさそうですが
任意のタイミングでインスタンスの生成解放ができないのと、
C++は初期化されるタイミングは不定なので、
JavaをC++移植するにしてもこの方法だとプログラムの組み方によっては問題があった気がします・・・。
私の勘違いでしたらすみません。
No.1
- 回答日時:
こんにちは。
Modern C++ Designで読んだ事がありますが、本来
Class* Class::Instance()
{
CLock lock(&this->mutex);
if(pInst == NULL)
pInst = new Class();
return pInst;
}
の筈が、此れだと呼び出す度に必ずlockオブジェクトが実行されて非効率なので、初期化時のみにロックを発生させる為
Class* Class::Instance()
{
if(pInst == NULL)
{
CLock lock(&this->mutex);
if(pInst == NULL)
pInst = new Class();
}
return pInst;
}
と変形した事で、効率が上がったものの、完全では無くなってしまったのでは無いでしょうか。
ご回答ありがとうございます。
ということは、上方にご提示いただいたソースは
スレッドセーフということでしょうか?
JavaでもDouble Checked Locking Patternが使われてるみたいで、問題になってるみたいですね。
こういう見えないセキュリティの穴って怖いです。
http://www.ibm.com/developerworks/jp/java/librar …
http://ml.tietew.jp/cppll/cppll/article/11704
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- その他(パソコン・周辺機器) タブレットで使用するUSBメモリについて 7 2022/05/26 14:27
- レシピ・食事 ボケのジャムを使った料理レシピは。 3 2022/11/04 17:01
- ドライブ・ストレージ SSDからHDDへのOSを含んだ換装 12 2023/01/19 03:30
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- 教えて!goo 指摘されたので質問です 1 2022/04/17 14:11
- Excel(エクセル) エクセルVBAについて質問です。 2 2022/12/09 17:59
- ファミレス・ファーストフード マクドナルドに働いている方、詳しい方に質問です。 私は今日、無性にマックナゲットを食べたくなり、ナゲ 1 2022/05/04 23:44
- C言語・C++・C# (C言語)めちゃくちゃな値になってしまいます。 5 2022/08/13 11:55
- Mac OS BOOK Air HDMI入力を表示するソフト 1 2023/01/21 18:06
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
エクセルVBAでセル番地を指定し...
-
ラベルの文字列を読み上げたい
-
Excel VBAでマウスの左クリック...
-
Excel VBA でPictureBoxオブジ...
-
pictureBoxの絵保存について。
-
ユーザーフォームのインポート...
-
【VBA】ワークシート上に画像フ...
-
using文の使い方について
-
アクセスで説明の欄の隠しオブ...
-
日本語の文字化けを直す方法
-
エクセルで、日付を入力すると...
-
「PC Helpsoft Driver Updated...
-
ユーザーフォームをショートカ...
-
レジ返品交換について(時間がか...
-
「ご処理進めて頂きますようお...
-
Excelで、ボタンにコメントをつ...
-
セックスレスの既婚女性は自慰...
-
Excelシート上のマクロを登録し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
エクセルVBAでセル番地を指定し...
-
日本語の文字化けを直す方法
-
Excel VBAでマウスの左クリック...
-
【エクセルのマクロ】クリップ...
-
現在アクティブになっているオ...
-
Accessのフォーム上にエクセル...
-
PowerpointVBAで指定のShapeオ...
-
文字列で小数点以下の0を削除し...
-
Excel2007 でのチェックボック...
-
エクセルのデータをwebフォーム...
-
【エクセル】複数のTextBoxに共...
-
コードでオブジェクトを最前面に
-
Imageコントロールにグラフを表...
-
ExcelのシートをAccessで表示し...
-
ユーザーフォームのインポート...
-
カッコ付けのオブジェクト名を...
-
Access からオブジェクトとして...
-
構造体の静的な初期化
おすすめ情報