Какова цель вызова Monitor.Wait () для блокировки во время L oop? - PullRequest
0 голосов
/ 04 марта 2020

Я в дикой природе и наткнулся на следующий фрагмент кода в конструкторе:

            lock (_lock)
                while (0 != x)
                    Monitor.Wait(_lock);

Я не совсем уверен, что это делает, и цель этого. Я читал о Monitor.Wait,

Когда поток вызывает Wait, он снимает блокировку с объекта и входит в очередь ожидания объекта. Следующий поток в очереди готовности объекта (если он есть) получает блокировку и использует объект исключительно.

Итак, допустим, я заблокировал поток _lock. Хотя (x! = 0), где x, скорее всего, обновляется другим потоком. Я выпускаю x для обновления, оно обновляется следующим потоком в очереди, и затем я могу свободно проверять x != 0 после того, как другой поток снял свою блокировку над x?

Более того , что, если в готовой очереди нет потока? Я вижу, как Monitor.Pulse(_lock) вызывается в других частях кода (отдельная функция) как метод, вызванный событием.

            lock (_lock)
                Monitor.Pulse(_lock);

Заранее спасибо за объяснение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...