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

only one thread may cause deadlock or freezing the program on Linux?

本文关键字:程序 死锁 冻结 Linux 线程 有一个      更新时间:2023-10-16

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

    pthread_mutex_lock(&the_mutex);

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

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

谢谢

pthread_mutex_lock()手册页:

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

如果互斥锁类型PTHREAD_MUTEX_DEFAULT,则尝试递归 锁定互斥锁会导致未定义的行为。正在尝试解锁 如果互斥锁未被调用线程锁定,则会导致未定义 行为。尝试解锁互斥锁(如果未锁定(结果 在未定义的行为中。

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

如果您想知道,在 Linux 上,PTHREAD_MUTEX_DEFAULT通常是 PTHREAD_MUTEX_NORMAL 的同义词,而 又是默认互斥体初始值设定项中使用的内容。