Mutexes can be used for thread synchronization within the same process.
Mutexes are implemented where possible by calling the operating system directly, thus they give lower level functionality than monitors.
A mutex is a synchronization object which at any one time zero or one thread "owns". If a thread has acquired a mutex, and another thread requests it, depending on a "wait" option, the second thread either returns without acquiring the mutex, or blocks until the first thread has released it. If several threads are blocked waiting for the mutex, only one of them is unblocked; all the others continue to wait.