Calls to multi-threaded apartment objects can arrive on any arbitrary thread. This means that calls to multi-threaded apartment objects are faster. COM does not have to do any special marshalling for MTA objects. Where Win32 process synchronization calls are not permissible in a single threaded apartment object, they are often found in a multi-threaded apartment object. The CriticalSection Win32 call is a process-based object that will allow a threaded object to lock out other threads from interrupting it until it unlocks the critical section of code.
Critical sections work only on threads within the same process or application.
The kernel-based synchronization objects Event, Mutex, and Semaphore can be used between threads and between processes. An event allows the signaller to signal one or more interested threads or processes of an event. The Mutex is an object that provides mutual exclusion between threads so that access to a resource can be serialized. A Semaphore provides a count limiting object. Semaphores are useful in limiting the number of threads a resource dispenser creates.