Arjay, I think I made it clear that I took the WaitForMultipleObjects() and ReleaseMutex() calls from a struct that is written with the RAII principles in mind. I put them this way in the example above to make it more readable. That is actually why ReleaseMutex() is called last (because it is called from a destructor in a real example.)