c) and d) are both guaranteed to pass because each event executes in a separate active queue. a) and b) are both race conditions because all three events are generated in the same active queue. There's no guaranteed ordering how those events will show up in the separate thread containing wait_order statement. However, I'm guessing most implementations will probably fail with a) and pass with b)