This class contains static
methods for thread
communication and synchronization. The Enter( )
and Exit( ) methods allow you to obtain and
release a lock on an object, respectively. If an object lock has
already been obtained by another thread, Enter( )
blocks and resumes executing when the lock is released.
Various languages have the ability to silently emit calls on this
type as language built-in primitives. C#'s
lock{ } syntax translates into these two methods:
the beginning of the lock block is transformed
into a call to Enter( ), and the close of the
block calls Exit( ). (In the presence of
exceptions and return calls, the C# compiler must ensure the release
of the monitor regardless of how the code exits the
lock block.)
TryEnter( ) attempts to obtain an object lock, but
it continues executing and returns false if unsuccessful.
Wait( ) releases an object lock and causes the
current thread to wait until another thread calls Pulse(
) or PulseAll( ) on the same object.
Wait( ) must be executed from a synchronized block
of code.
public sealed class Monitor {
// Public Static Methods
public static void Enter(object obj);
public static void Exit(object obj);
public static void Pulse(object obj);
public static void PulseAll(object obj);
public static bool TryEnter(object obj);
public static bool TryEnter(object obj, int millisecondsTimeout);
public static bool TryEnter(object obj, TimeSpan timeout);
public static bool Wait(object obj);
public static bool Wait(object obj, int millisecondsTimeout);
public static bool Wait(object obj, int millisecondsTimeout, bool exitContext);
public static bool Wait(object obj, TimeSpan timeout);
public static bool Wait(object obj, TimeSpan timeout, bool exitContext);
}