ここに私のワークステーションで試していたコードがあります。C#でVOLATILEキーワードが本当に必要ですか?
class Program
{
public static volatile bool status = true;
public static void Main()
{
Thread FirstStart = new Thread(threadrun);
FirstStart.Start();
Thread.Sleep(200);
Thread thirdstart = new Thread(threadrun2);
thirdstart.Start();
Console.ReadLine();
}
static void threadrun()
{
while (status)
{
Console.WriteLine("Waiting..");
}
}
static void threadrun2()
{
status = false;
Console.WriteLine("the bool value is now made FALSE");
}
}
ご覧のとおり、Main
には3つのスレッドが発生しています。その後、ブレークポイントを使ってスレッドを追跡しました。私の最初の構想は、3つのスレッドが同時に起動されることですが、私のブレークポイントの流れは、スレッド実行フローが次々と続いていくことを示していました(スレッドのトップからボトム実行という出力フォーマットもそうでした)。みんななぜそれが起こっているのですか?
さらに、宣言でvolatileキーワードを使わずに同じプログラムを実行しようとしましたが、プログラムの実行に変更はありませんでした。 volatile
というキーワードは実用的ではないとは思わない。私はどこかで間違っていますか?
デバッガを使用するとどうなると思いますか? – JonH
なぜスレッドは同時に実行されると思いますか? – Alan
それでは、使用しているときと使用していないときに、出力に違いはありませんか? –