Interlocked.ExchangeがBoolean型をサポートしないのはなぜですか?
2023-10-13 16:31:29
質問
.NETチームがInterlocked.Exchangeの操作でBooleanをサポートしないことにしたのは、何か現実的な理由があるのでしょうか?
使用例の1つは、あるコードが一度だけ実行されることを保証したいときで、そのためにブール値フラグを使用したいのです。
どのように解決するのですか?
はい、ちゃんとした理由があります。 Interlocked メソッドの実装には、プロセッサ レベルでの低レベルのサポートが必要です。 以下を参照してください。 この回答 を参考にしてください。 アーキテクチャに依存しないフレームワークを定義する場合の問題です。
インターロック クラスによってサポートされる低ロック技術を、ネイティブ プロセッサのワード サイズのほんの一部であるデータ型で実装することは困難です。 10 年以上前に流行した CPU 設計への RISC アプローチは、これを強く阻止しました。 オペランドサイズとネイティブのメモリバス幅の不一致が、実装を非常に困難にしている。 Intelのx86アーキテクチャが、近道を選ばないことですでに30年も生き残っている理由の1つです。 RISCの詳細な背景はこちら ウィキペディアの記事 .
関連
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] C#の==とEquals()の違いについて
-
[解決済み] EntitySetの更新ができない - DefiningQueryがあり、<UpdateFunction>要素が存在しないため
-
[解決済み] C#でURLのクエリ文字列を作成するには?
-
[解決済み] in vs ref vs out の使い分け
-
[解決済み] 共分散と共分散が値型をサポートしない理由
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み】WebResource.axdとは何ですか?