Mutex - I just came across a very simple definition and
example of mutex from Threading in C#, by Joe
Albahari, so I just thought of sharing it.
A Mutex is like a C# lock, but it can work across multiple processes. In other words, Mutex can be computer-wideas well
as application-wide.
Acquiring
and releasing an uncontended Mutex takes a
few microseconds — about 50 times slower than a lock.
With a Mutex class, you call the WaitOne method to
lock and ReleaseMutex to
unlock. Closing or disposing aMutex automatically releases it. Just as with the lock statement, a Mutex can be
released only from the same thread that obtained it.
A common use for a
cross-process Mutex is to
ensure that only one instance of a program can run at a time. Here’s how it’s
done:
class OneAtATimePlease
{
static void Main()
{
// Naming a Mutex makes it available computer-wide. Use a name
that's
// unique to your company and application (e.g., include your
URL).
using (var mutex = new Mutex (false, "oreilly.com OneAtATimeDemo"))
{
// Wait a few seconds if contended, in case another instance
// of the program is still in the process of shutting down.
if (!mutex.WaitOne (TimeSpan.FromSeconds (3), false))
{
Console.WriteLine ("Another
app instance is running. Bye!");
return;
}
RunProgram();
}
}
static void RunProgram()
{
Console.WriteLine ("Running. Press Enter to
exit");
Console.ReadLine();
}
}
If
running under Terminal Services, a computer-wide Mutex is
ordinarily visible only to applications in the same terminal server session. To
make it visible to all terminal server sessions, prefix its name with Global\.
Note : For more in depth knowledge you can go to link