首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有一个线程可能会导致Linux上的程序死锁或冻结?

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

Stack Overflow用户
提问于 2011-11-06 09:10:56
回答 1查看 1.2K关注 0票数 4

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

代码语言:javascript
复制
    pthread_mutex_lock(&the_mutex);

但是,在GDB中,我的代码在这里被冻结了,它是挂起的。

为什么?只有一个线程!

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-06 09:20:11

pthread_mutex_lock()手册页中:

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

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

底线:如果您试图锁定一个已经锁定的互斥锁,那么只有一个线程就完全有可能导致死锁。

如果您想知道,在Linux上,PTHREAD_MUTEX_DEFAULT通常是PTHREAD_MUTEX_NORMAL的同义词,而它又是默认互斥锁初始化器中使用的东西。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8024556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档