Yes, the current thread needs to "own" the monitor in order to call either Wait
or Pulse
, as documented. (So you'll need to lock for Pulse
as well.) I don't know the details for why it's required, but it's the same in Java. I've usually found I'd want to do that anyway though, to make the calling code clean.
Note that Wait
releases the monitor itself, then waits for the Pulse
, then reacquires the monitor before returning.
As for using ManualResetEvent
or AutoResetEvent
instead - you could, but personally I prefer using the Monitor
methods unless I need some of the other features of wait handles (such as atomically waiting for any/all of multiple handles).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…