我正在做C++多线程编程。我使用互斥来读写一个队列,以避免死锁。目前,我只启动了1个线程
pthread_mutex_lock(&the_mutex);但是,在GDB中,我的代码在这里被冻结了,它是挂起的。
为什么?只有一个线程!
谢谢
发布于 2011-11-06 09:20:11
在pthread_mutex_lock()手册页中:
如果互斥类型为PTHREAD_MUTEX_NORMAL,则不提供死锁检测。尝试重新锁定互斥锁会导致死锁。如果线程试图解锁尚未锁定的互斥锁或未锁定的互斥锁,则会导致未定义的行为。
如果互斥锁类型为PTHREAD_MUTEX_DEFAULT,则尝试递归锁定互斥锁将导致未定义的行为。如果互斥锁未被调用线程锁定,则尝试解锁该互斥锁会导致未定义的行为。如果互斥锁未锁定,则尝试解锁互斥锁会导致未定义的行为。
底线:如果您试图锁定一个已经锁定的互斥锁,那么只有一个线程就完全有可能导致死锁。
如果您想知道,在Linux上,PTHREAD_MUTEX_DEFAULT通常是PTHREAD_MUTEX_NORMAL的同义词,而它又是默认互斥锁初始化器中使用的东西。
https://stackoverflow.com/questions/8024556
复制相似问题