If I set 3 threads to wait for a mutex to be release, do they form a queue based on the order they requested it in or is it undefined behaviour (i.e. we don\'t know which on
The wake-up order is undefined, see
Can a single SetEvent() trigger multiple WaitForSingleObject()