I have two questions:
0) I'd like to know what some real world applications where using MutEx is an absolute necessity.
The conditions the application must require are
0a) exclusive access to some shared resource (obviously)
0b) arbitrary order of thread execution (the OS may not guarantee thread execution order)
OR
0c) ordered/dependent execution of threads (where order is guaranteed by the application). To me, this stinks of a DAG and I'm ruminating on how to make something like this work without introduction additional global state (re condition variables). There could be some neat outcomes from using a DAG to model dependent thread execution (like error checking in an IDE, for example).
I'm stuck on what could possibly need these conditions, though.
1) I'm also interested in some fundamental examples (like you'd find in a course on algorithms) that show the characterization, logic, and correctness of different implementations. Where can I find resources that talk about these?
[0] https://stackoverflow.com/a/34558/7823006 <-- I found this explanation to be so amusing that I thought I'd share.