c++multithreadingrecursionmutexrecursive-mutex

When to use recursive mutex?


I understand recursive mutex allows mutex to be locked more than once without getting to a deadlock and should be unlocked the same number of times. But in what specific situations do you need to use a recursive mutex? I'm looking for design/code-level situations.


Solution

  • For example when you have function that calls it recursively, and you want to get synchronized access to it:

    void foo() {
       ... mutex_acquire();
       ... foo();
       ... mutex_release();
    }
    

    without a recursive mutex you would have to create an "entry point" function first, and this becomes cumbersome when you have a set of functions that are mutually recursive. Without recursive mutex:

    void foo_entry() {
       mutex_acquire(); foo(); mutex_release(); }
    
    void foo() { ... foo(); ... }