只有一个线程可能导致死锁或冻结Linux上的程序?

use*_*288 4 c++ linux multithreading mutex deadlock

我正在做C++多线程编程.我使用互斥锁来读取和写入队列以避免死锁.目前,我只推出1个线程

    pthread_mutex_lock(&the_mutex);
Run Code Online (Sandbox Code Playgroud)

但是,在GDB中,我的代码在这里被冻结,它正在等待.

为什么?只有一个线程!!!

谢谢

thk*_*ala 6

pthread_mutex_lock()手册页:

如果互斥锁类型为PTHREAD_MUTEX_NORMAL,则不应提供死锁检测.尝试重新锁定互斥锁会导致死锁.如果某个线程尝试解锁未锁定的互斥锁或解锁的互斥锁,则会导致未定义的行为.

如果互斥锁类型为PTHREAD_MUTEX_DEFAULT,则尝试递归锁定互斥锁会导致未定义的行为.如果未通过调用线程锁定互斥锁,则尝试解锁互斥锁会导致未定义的行为.如果未锁定互斥锁,则尝试解锁互斥锁会导致未定义的行为.

结论:如果您尝试锁定已锁定的互斥锁,则完全有可能仅使用一个线程导致死锁.

如果你想知道,在Linux PTHREAD_MUTEX_DEFAULT上通常是一个同义词PTHREAD_MUTEX_NORMAL,而这又是默认的互斥初始化程序中使用的.