c++multithreadingpthreadsmutexcontention

Do mutexes guarantee ordering of acquisition? Unlocking thread takes it again while others are still waiting


A coworker had an issue recently that boiled down to what we believe was the following sequence of events in a C++ application with two threads:

Does this sequence of events fit with the semantics of, say, C++11's std::mutex and/or pthreads? I can honestly say I've never thought about this aspect of mutexes before.

Are there any fairness guarantees to prevent starvation of other threads for too long, or any way to get such guarantees?


Solution

  • Known problem. C++ mutexes are thin layer on top of OS-provided mutexes, and OS-provided mutexes are often not fair. They do not care for FIFO.

    The other side of the same coin is that threads are usually not pre-empted until they run out of their time slice. As a result, thread A in this scenario was likely to continue to be executed, and got the mutex right away because of that.