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

时间:2011-11-06 01:10:56

标签: c++ linux multithreading mutex deadlock

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

启动了一个帖子
    pthread_mutex_lock(&the_mutex);

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

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

感谢

1 个答案:

答案 0 :(得分:6)

pthread_mutex_lock()手册页:

  

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

     

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

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

如果您想知道,在Linux上PTHREAD_MUTEX_DEFAULT通常是PTHREAD_MUTEX_NORMAL的同义词,而后者又是默认互斥初始化程序中使用的内容。