Вот код, который я пытался на своей рабочей станции.Нам действительно нужно ключевое слово VOLATILE в C#?
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
. Затем, используя точки останова, я отслеживал потоки. Моя первоначальная концепция заключалась в том, что все три потока будут запускаться одновременно, но мой поток точки останова показал, что поток выполнения потока последовал один за другим (и так был выходной формат, а именно: от верхнего к нижнему исполнению потоков). Ребята, почему это происходит?
Кроме того, я попытался запустить ту же программу, не используя ключевое слово volatile в объявлении, и не нашел никаких изменений в выполнении программы. Я сомневаюсь, что ключевое слово volatile
не имеет практического использования вживую. Я где-то ошибаюсь?
Как вы ожидаете, что это произойдет при использовании отладчика? – JonH
Почему вы считаете, что потоки будут выполняться одновременно? – Alan
Тогда почему бы мне не получить разницу в выходе при использовании и не использовать их? –