1. ホーム
  2. c#

Interlocked.ExchangeがBoolean型をサポートしないのはなぜですか?

2023-10-13 16:31:29

質問

.NETチームがInterlocked.Exchangeの操作でBooleanをサポートしないことにしたのは、何か現実的な理由があるのでしょうか?

使用例の1つは、あるコードが一度だけ実行されることを保証したいときで、そのためにブール値フラグを使用したいのです。

どのように解決するのですか?

はい、ちゃんとした理由があります。 Interlocked メソッドの実装には、プロセッサ レベルでの低レベルのサポートが必要です。 以下を参照してください。 この回答 を参考にしてください。 アーキテクチャに依存しないフレームワークを定義する場合の問題です。

インターロック クラスによってサポートされる低ロック技術を、ネイティブ プロセッサのワード サイズのほんの一部であるデータ型で実装することは困難です。 10 年以上前に流行した CPU 設計への RISC アプローチは、これを強く阻止しました。 オペランドサイズとネイティブのメモリバス幅の不一致が、実装を非常に困難にしている。 Intelのx86アーキテクチャが、近道を選ばないことですでに30年も生き残っている理由の1つです。 RISCの詳細な背景はこちら ウィキペディアの記事 .