多线程造成死锁的两种情况
来源:互联网 发布:暗黑战神源码解读 编辑:程序博客网 时间:2024/05/14 16:46
* * 程序中使用一个以上的互斥量造成程序死锁 */#include<stdio.h>#include<stdlib.h>#include<pthread.h>//定义两个互斥锁并初始化pthread_mutex_t ALock = PTHREAD_MUTEX_INITIALIZER;pthread_mutex_t BLock = PTHREAD_MUTEX_INITIALIZER;/* * 功能:线程1函数 */void* thread1_func(void *arg){ //sleep(1); pthread_mutex_lock(&ALock); sleep(2); printf("thread 1 lock ALock, wanting get BLock...\n"); pthread_mutex_lock(&BLock); printf("thread 1 get BLock\n"); pthread_mutex_unlock(&BLock); pthread_mutex_unlock(&ALock); pthread_exit(NULL);}/* * 功能:线程而2函数 */void* thread2_func(void *arg){ sleep(1); pthread_mutex_lock(&BLock); printf("thread 2 lock BLock, wating get ALock...\n"); pthread_mutex_lock(&ALock); printf("thread 2 get ALock\n"); pthread_mutex_unlock(&ALock); pthread_mutex_unlock(&BLock); pthread_exit(NULL);}int main(void){ pthread_t thid1, thid2; pthread_create(&thid1, NULL, thread1_func, NULL); pthread_create(&thid2, NULL, thread2_func, NULL); pthread_join(thid1, NULL); pthread_join(thid2, NULL); printf("main thread exit\n"); exit(0);}
#include<stdio.h>#include<stdlib.h>#include<pthread.h>//在同一个线程对同一个互斥量加锁两次会出现死锁pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;//定义一个互斥量,并对其进行初始化int a = 6;/*void* thread_func(void *arg){ pthread_mutex_lock(&lock); pthread_mutex_lock(&lock); printf("thread a = %d\n", a); pthread_mutex_unlock(&lock); pthread_exit(NULL);}*/int main(void){ pthread_mutex_lock(&lock); pthread_mutex_lock(&lock);//对一个互斥量加锁两次,出现死锁 printf("%d\n", a);//永远不会执行到这里 pthread_mutex_unlock(&lock); exit(EXIT_SUCCESS);/* int err; pthread_t thid; err = pthread_create(&thid, NULL, thread_func, NULL); if(err != 0) { printf("pthread_create failed\n"); exit(EXIT_FAILURE); } pthread_join(thid, NULL); printf("main thread a = %d\n",a); exit(EXIT_SUCCESS);*/}
阅读全文
0 0
- 多线程造成死锁的两种情况
- 多线程造成死锁的例子
- HashMap 多线程push造成死锁
- Java多线程死锁情况
- 黑马程序员:多线程同步造成的死锁示例及理解
- 一些防止多线程同步造成死锁的技巧
- Java第七课 Java的多线程程序进程和线程的概念,实现多线程的两种方式,线程同步的原理,线程的死锁,运用wait和notify来实现producer - consumer关系,线程终止的两种情况。
- Java多线程死锁情况模拟
- sqlserver高并发情况下 select 和update操作造成死锁的解决方法
- sqlserver高并发情况下 select 和update操作造成死锁的解决方法
- 造成端口起不来的几种情况
- java多线程中死锁情况的一个示例
- java多线程中死锁情况的一个示例
- spinlock造成死锁的原因
- 造成死锁的四个必要条件
- java多线程synchronized的使用及死锁的造成和解锁
- JAVA--多线程中notify()造成的死锁原因的研究与使用
- mysql死锁几种情况的测试
- vue框架搭建的详细步骤之项目结构(二)
- Postman 常用测试结果验证及使用技巧
- MySql系列:中文写入数据库出现错误java.sql.SQLException: Incorrect string value: '\xE5\xxxx' for column 'xxxx' at r
- 苹果电脑获取Android Studio的发布版SHA1和开发版SHA1
- Android如何实现微信支付
- 多线程造成死锁的两种情况
- C++中static
- Android---Intent的介绍
- Caused by: org.jbpm.api.JbpmException: resource classpath:jdpm/jbpm.cfg.xml does not exist
- javaweb的request获取真实IP地址
- 代码整洁之道--函数
- [公告] 2017年9月装机员系统更新
- 通过H5的新标签canvas做出一个时钟的全过程,希望对初学者有帮助
- HDU 3072 Intelligence System(Tarjan+最小树形图)