当用2个螺纹锁定时,将recursive_mutex死锁

Will recursive_mutex deadlock when locked by 2 threads?

本文关键字:recursive mutex 死锁 定时 2个 锁定 当用      更新时间:2023-10-16

std ::当相同线程多次锁定时,recursive_mutex不会死锁。

当多次锁定多次锁定时,它会死锁吗?

当多个线程多次锁定多次时,它会死吗?

不可能发生。

by 定义 mutex最多被一个线程锁定。std::recursive_mutex是某种静音。否则,它不符合相互排斥的目标,因为它应该是某种静音概念。

因此,甚至不允许另一个线程锁定一次。当这样做时,其他线程会阻止(直到锁定锁定 - 递归锁定的次数多倍(。

fyi,这是递归静音的简单实现:

static const std::thread_id NO_THREAD;
class recursive_mutex {
public:
    void lock() {
        auto me = std::this_thread::get_id();
        if (owner != me) {
            mtx.lock();
            owner = me;
            assert(count == 0);
        }
        count++;
    }
    void unlock() {
        auto me = std::this_thread::get_id();
        assert(owner == me);
        assert(count > 0);
        count--;
        if (count == 0) {
            owner = NO_THREAD;
            mtx.unlock();
        }
    }
private:
    std::mutex      mtx;
    std::thread::id owner;
    unsigned        count{0};
};