Что означает получение блокировки (Wait (object, TimeSpan))? - PullRequest
0 голосов
/ 05 марта 2020

Я читаю документацию для Monitor.Wait(object, Timespan), и поэтому мне трудно понять, что означает повторное получение блокировки. Документация гласит:

Возвращает

Логический

true , если блокировка была восстановлены до истечения указанного времени; false , если блокировка была восстановлена ​​по истечении указанного времени. Метод не возвращается до тех пор, пока блокировка не будет восстановлена.

Я сделал небольшой пример и хотел узнать, может ли кто-нибудь объяснить, используя мой пример ниже. Где восстанавливается блокировка, если вообще, и каким потоком?

     class Program
     {
        static readonly object _lock = new object();
        static int x = 0;
        static void Main(string[] args)
        {
            new Thread(Write).Start();
            new Thread(Read).Start();
        }

        static void Read()
        {
            lock (_lock)
            {
                while (x != 10)
                    if (!Monitor.Wait(_lock, 5000))
                        Console.WriteLine("Timeout!");
                Console.WriteLine($"{x} is 10!");
            }
        }

        static void Write()
        {
            while (x < 10)
            {
                x++;
                Thread.Sleep(1000);
                Console.WriteLine(x);
            }
            lock (_lock)
            {
                Monitor.Pulse(_lock);
            }
        }
    }

В общем, если кто-то может привести пример того, когда Wait(Object, Timespan вернет true, false и вообще не вернет Я дам вам победный ответ. Спасибо!

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