Страницы

Поиск по вопросам

вторник, 17 декабря 2019 г.

Почему нет ошибки одновременного доступа?

#c_sharp #многопоточность


я так понимаю разные потоки меняют одну и ту же переменную, и должен быть Exception

public partial class MainWindow : Window
{
  Int64 i = 0;
  Int64 j = 1;

  private void Test()
  {
    while (true)
    {
      j = -j;
      i += j;
    }
  }

  public MainWindow()
  {
    InitializeComponent();
    for (int n = 0; n < 4; ++n)
    {
      Thread t = new Thread(() => Test());
      t.Priority = ThreadPriority.Normal;
      t.Start();
    }
  }
}

    


Ответы

Ответ 1



Похоже вы путаете потоки с процессами. При попытке доступа к памяти другого процесса действительно должно возникнуть исключение, но только если такой доступ не санкционирован ОС. Потоки же, относятся к одному процессу и совместно используют память процесса, поэтому в вашем коде ни каких исключений быть не должно.

Комментариев нет:

Отправить комментарий