ミューテックスはミュータブルであるべきなのか?
2023-11-05 14:06:25
質問
これがスタイルの質問なのか、それとも厳格なルールがあるものなのかわかりませんが......。
パブリックメソッドインターフェースをできるだけ const に保ちつつ、オブジェクトをスレッドセーフにしたい場合、mutable mutexes を使用すべきでしょうか?一般的に、これは良いスタイルなのでしょうか、それとも const でないメソッドインターフェイスが好ましいのでしょうか?あなたの考えを正当化してください。
どのように解決するのですか?
[ 回答は編集済みです。 ]
基本的に、ミュータブルなミューテックスでconstメソッドを使用するのは良いアイデアです(ちなみに参照を返してはいけません。ミューテックスは const であるべきではなく、ロック/アンロックメソッドを const として定義するのは恥知らずな嘘でしょう...。
実はこれ(とメモ化)だけが、私が見た限りでは
mutable
キーワードの唯一の正当な使用法です。
また、オブジェクトの外部にあるミューテックスを使用することもできます。すべてのメソッドがリエントラントになるように手配し、ユーザ自身がロックを管理するようにします。
{ lock locker(the_mutex); obj.foo(); }
をタイプするのはそれほど難しくありませんし
{
lock locker(the_mutex);
obj.foo();
obj.bar(42);
...
}
は、2つのmutexロックを必要としないという利点があります(そして、オブジェクトの状態が変化しなかったことが保証されます)。
関連
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] mutable' キーワードには、const 関数で変数を変更できるようにする以外の目的があるのでしょうか?
-
[解決済み] ミュータブル構造体はなぜ "悪 "なのか?
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
-
[解決済み] ロックされていないミューテックスをロックすることは、どの程度効率的ですか?ミューテックスのコストは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー