[解決済み] C#のvolatileキーワードの使い方を説明します。
2023-04-08 06:35:18
質問
の挙動を視覚的に説明する小さなプログラムを作りたいのですが、どうすればよいでしょうか?
volatile
キーワードの動作を視覚的に説明する小さなプログラムをコーディングしたいと思います。理想的には、揮発性のない静的フィールドへの同時アクセスを実行し、そのために不正な動作を取得するプログラムであるべきです。
同じプログラム内で volatile キーワードを追加すると、問題が解決するはずです。
それは私が達成することができなかったものです。何度か試し、最適化を有効にするなどしても、私はいつも「volatile」キーワードなしで正しい動作を得ます。
このトピックについて何かご存知でしょうか。簡単なデモ アプリでそのような問題をシミュレートする方法をご存知ですか? それはハードウェアに依存するのでしょうか?
どのように解決するのですか?
動作例ができました!
主なアイデアはwikiから受け取ったものですが、C#用に若干の変更を加えています。wikiの記事では、C++の静的フィールドに対してこれを示していますが、C#は常に静的フィールドへの要求を慎重にコンパイルしているように見えます...そして私は静的ではないものを使って例を作っています。
この例を
リリース
モードで実行し
デバッガなし
(すなわち Ctrl+F5 を使用) した場合、行の
while (test.foo != 255)
の行は 'while(true)' に最適化され、このプログラムは決して戻りません。
しかし
volatile
を追加すると、常に'OK'が返されます。
class Test
{
/*volatile*/ int foo;
static void Main()
{
var test = new Test();
new Thread(delegate() { Thread.Sleep(500); test.foo = 255; }).Start();
while (test.foo != 255) ;
Console.WriteLine("OK");
}
}
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] 揮発性 vs. 連動性 vs. ロック性
-
[解決済み] volatileキーワードは何に役立つのでしょうか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】統合マネージドパイプラインモードで適用されないASP.NETの設定が検出された
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である