Страницы

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

понедельник, 29 октября 2018 г.

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

я так понимаю разные потоки меняют одну и ту же переменную, и должен быть 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(); } } }


Ответ

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

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

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