Pulse(lockObj)表示釋放當前被lock的lockObj,容許其他線程調用。(相當於暫時掛起當前線程)
Wait(lockObj)表示等待當前被其他線程佔用的lockObj。
下面的代碼將會交替執行兩個線程:
class TickTock
{
object lockOn = new object();
public void Tick(bool running)
{
lock (lockOn)
{
if (!running)
{
Monitor.Pulse(lockOn);
return;
}
Console.Write("Tick ");
Monitor.Pulse(lockOn);//let tock() run
Monitor.Wait(lockOn);//wait for tock() to complete
}
}
public void Tock(bool running)
{
lock (lockOn)
{
if (!running)
{
Monitor.Pulse(lockOn);
return;
}
Console.WriteLine("Tock");
Monitor.Pulse(lockOn);
Monitor.Wait(lockOn);
}
}
}