Я читаю документацию для 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 и вообще не вернет Я дам вам победный ответ. Спасибо!