use*_*288 4 c++ linux multithreading mutex deadlock
我正在做C++多线程编程.我使用互斥锁来读取和写入队列以避免死锁.目前,我只推出1个线程
pthread_mutex_lock(&the_mutex);
Run Code Online (Sandbox Code Playgroud)
但是,在GDB中,我的代码在这里被冻结,它正在等待.
为什么?只有一个线程!!!
谢谢
从pthread_mutex_lock()手册页:
如果互斥锁类型为PTHREAD_MUTEX_NORMAL,则不应提供死锁检测.尝试重新锁定互斥锁会导致死锁.如果某个线程尝试解锁未锁定的互斥锁或解锁的互斥锁,则会导致未定义的行为.
如果互斥锁类型为PTHREAD_MUTEX_DEFAULT,则尝试递归锁定互斥锁会导致未定义的行为.如果未通过调用线程锁定互斥锁,则尝试解锁互斥锁会导致未定义的行为.如果未锁定互斥锁,则尝试解锁互斥锁会导致未定义的行为.
结论:如果您尝试锁定已锁定的互斥锁,则完全有可能仅使用一个线程导致死锁.
如果你想知道,在Linux PTHREAD_MUTEX_DEFAULT上通常是一个同义词PTHREAD_MUTEX_NORMAL,而这又是默认的互斥初始化程序中使用的.
| 归档时间: |
|
| 查看次数: |
1012 次 |
| 最近记录: |