INFO: Critical Sections Versus Mutexes
Article ID: 105678
Article Last Modified on 11/21/2006
APPLIES TO
- Microsoft Win32 Application Programming Interface, when used with:
- Microsoft Windows NT Advanced Server 3.1
- Microsoft Windows NT 3.51 Service Pack 5
- Microsoft Windows 2000 Standard Edition
- Microsoft Windows XP Professional
This article was previously published under Q105678
SUMMARY
Critical sections and mutexes provide synchronization that is very similar,
except that critical sections can be used only by the threads of a single
process. There are two areas to consider when choosing which method to use
within a single process:
- Speed. The Synchronization overview says the following about
critical sections:
... critical section objects provide a slightly faster, more
efficient mechanism for mutual-exclusion synchronization.
Critical sections use a processor-specific test and set instruction
to determine mutual exclusion.
- Deadlock. The Synchronization overview says the following about
mutexes:
If a thread terminates without releasing its ownership of a
mutex object, the mutex is considered to be abandoned. A waiting
thread can acquire ownership of an abandoned mutex, but the wait
function's return value indicates that the mutex is abandoned.
WaitForSingleObject() will return WAIT_ABANDONED for a mutex that
has been abandoned. However, the resource that the mutex is
protecting is left in an unknown state.
There is no way to tell whether a critical section has been
abandoned.
Additional query words: 3.50 3.51 4.0
Keywords: kbinfo kbthread kbthreadsync kbkernbase KB105678