
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Synchronizing Multiple Processes with the Mutex
|
1051
Discussion
A Mutex is designed to give mutually exclusive (thus the name) access to a single
resource. A
Mutex can be thought of as a cross-process, named Monitor where the
Mutex is “entered” by waiting on it and becoming the owner, then “exited” by releas-
ing the
Mutex for the next thread that is waiting on it. If a thread that owns a Mutex
ends, the Mutex is released automatically.
Using a
Mutex is slower than using a Monitor as a Monitor is a purely managed con-
struct whereas a Mutex is based on the Mutex kernel object. A Mutex cannot be
“pulsed” as can a
Monitor, but it can be used across processes which a Monitor can-
not. Finally, the
Mutex is based on WaitHandle, so it can be waited on with other
objects derived from
WaitHandle, like Semaphore and the event classes.
The
SharedMemoryManager and PInvoke classes are listed in their entirety in
Example 18-12.
return item;
}
}
Example 18-12. SharedMemoryManager and PInvoke classes
/// <summary>
/// Class for sending objects through shared memory using a mutex
/// to synchronize access to the shared memory
/// </summary>
public class SharedMemoryManager<TransferItemType> : IDisposable
{
#region Consts
const int INVALID_HANDLE_VALUE = -1;
const int FILE_MAP_WRITE = 0x0002;
/// <summary>
/// ...