
【Linux】死锁
发布日期:2021-05-10 06:33:37
浏览次数:4
分类:技术文章
本文共 1509 字,大约阅读时间需要 5 分钟。
1.死锁
-
当多个执行流使用同一个互斥锁的时候,有一个执行流获取到互斥锁之后,但是没有释放互斥锁,导致其他执行流卡死在加锁的接口中,我们称之为这种现象叫死锁
-
多个执行流,在多个互斥锁的情况下,每一个执行流都占有一把互斥锁,但是还要申请对方的互斥锁,这种情况下,就会导致各个执行流阻塞掉,这种现象称之为死锁
#include#include #include #define THREADCOUNT 1pthread_mutex_t lock1;pthread_mutex_t lock2;void* Threadlock1(void* arg){ (void)arg; pthread_mutex_lock(&lock1); sleep(2); pthread_mutex_lock(&lock2); pthread_mutex_unlock(&lock2); pthread_mutex_unlock(&lock1); return NULL;}void* Threadlock2(void* arg){ (void)arg; pthread_mutex_lock(&lock2); sleep(2); pthread_mutex_lock(&lock1); pthread_mutex_unlock(&lock1); pthread_mutex_unlock(&lock2); return NULL;}int main(){ pthread_mutex_init(&lock1, NULL); pthread_mutex_init(&lock2, NULL); pthread_t tid1[THREADCOUNT], tid2[THREADCOUNT]; for(int i = 0; i < THREADCOUNT; i++) { int ret = pthread_create(&tid1[i], NULL, Threadlock1, NULL); if(ret < 0) { perror("thread1 error!\n"); return -1; } ret = pthread_create(&tid1[i], NULL, Threadlock2, NULL); if(ret < 0) { perror("thread2 error!\n"); return -1; } } sleep(3); for(int i = 0; i < THREADCOUNT; i++) { pthread_join(tid1[i], NULL); pthread_join(tid2[i], NULL); } pthread_mutex_destroy(&lock1); pthread_mutex_destroy(&lock2); return 0;}
2.操作
- gdb:查看多线程的调用堆栈:thread apply all bt
- t [线程编号] :跳转到具体线程的堆栈中
- f [堆栈编号] :跳转到具体的某一个堆栈当中去
3.死锁必备条件
- 互斥条件
- 请求与保持联系(吃着碗里的,看着锅里的)
- 不可剥夺条件
- 循环等待
4.防止死锁
- 破坏必要条件
- 加锁顺序一致
- 不要忘记解锁,在所有的可能导致执行流退出的地方进行解锁
转载地址:https://blog.csdn.net/weixin_43967449/article/details/110355279 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2023年12月07日 00时43分58秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
HDU 1248 寒冰王座
2021-05-31
HDU 1284 钱币兑换问题
2021-05-31
HDU 2191 悼念512汶川大地震遇难同胞
2021-05-31
HDU 2844 coins
2021-05-31
HDU 1671 Phone List
2021-05-31
HDU 2594 Simpsons’ Hidden Talents
2021-05-31
HDU 2136 Largest prime factor
2021-05-31
vmware软件"The MSI failed"问题
2021-05-31
三天两次连攻 Value DeFi 的组合创新与风险
2021-05-31
bEarn Fi 黑客攻击始末:代码现“小”问题轻松得手 1,100 万美元
2021-05-31
BSC 再现闪电贷攻击 BUNNY 闪崩
2021-05-31
他们黑了美国最大的输油管道 Colonial Pipeline 还说盗亦有道
2021-05-31
又一打脸现场!Fork Bunny 的 Merlin 损失 240 ETH
2021-05-31
Belt Finance 遭闪电贷攻击,Fork Curve 的潘多拉魔盒已打开?
2021-05-31
PTA——整除光棍
2021-05-31
会场安排问题
2021-05-31
SQL中DDL语句操作详解
2021-05-31
cs224w(图机器学习)2021冬季课程学习笔记1
2021-05-31