线程6:什么情况造成死锁 柔情只为你懂 2022-12-06 04:03 144阅读 0赞 ## 什么情况造成死锁 ## **1.什么是死锁:** 由于互斥锁使用不当,导致多个进程无法进行下一步代码的运行。 即:两个互斥锁卡住了,以至于其它线程无法使用共享资源 **2.什么情况造成死锁:** 前提条件:你有2个锁, 当线程A获得一把锁的时候,想要获得另外一把锁,而线程B使用着线程A想要的锁,还想要获得线程A正在使用的锁的时候。 **参考代码:** #include <stdio.h> #include <pthread.h> int g_data=0;//共享资源 pthread_mutex_t mutex;//创建互斥锁1(互斥量) pthread_mutex_t mutex2;//创建互斥锁2(互斥量) void *func1(void*arg)//参数3:调用无类型指针API { int i; pthread_mutex_lock(&mutex);//加锁 sleep(1);//确保线程2获得锁2 pthread_mutex_lock(&mutex2);//加锁2 for(i=0;i<5;i++) { printf("t1:%ld thread is create\n",(unsigned long)pthread_self()); //pthread_self():返回自身线程id,为pthread_t类型 printf("t1:param is %d:\n",*((int*)arg));//转化为int*,再取值 sleep(1); } pthread_mutex_unlock(&mutex);//解锁,别的线程可以上了 } void *func2(void*arg)//参数3:调用无类型指针API { pthread_mutex_lock(&mutex2);//加锁2 sleep(1);//确保线程1获得锁1 pthread_mutex_lock(&mutex);//加锁 printf("t2:%ld thread is create\n",(unsigned long)pthread_self()); //pthread_self():返回自身线程id,为pthread_t类型 printf("t2:param is %d:\n",*((int*)arg));//转化为int*,再取值 }//大家都拿不到另外一把想要的锁,就会造成死锁 int main() { int ret;//返回值 pthread_t t1; pthread_t t2; pthread_mutex_init(&mutex,NULL);//参数2:锁的属性 pthread_mutex_init(&mutex2,NULL);//初始化 int param=100;//参数4:调用时:将int*转化为void*.100:随便给的数 ret=pthread_create(&t1,NULL,func1,(void*)¶m); //参数1:指针指向t1,NULL:线程属性,参数3:启动线程调用的函数,参数4:打印的值 ret=pthread_create(&t2,NULL,func2,(void*)¶m); if(ret==0) { printf("main函数创建线程t1成功\n"); } if(ret==0) { printf("main函数创建线程t2成功\n"); } printf("main:%ld\n",(unsigned long)pthread_self()); pthread_join(t1,NULL);//等待线程 pthread_join(t2,NULL);//等待线程 pthread_mutex_destroy(&mutex);//销毁这把锁 pthread_mutex_destroy(&mutex2);//销毁这把锁 return 0; } **运行结果:** dazai@dazai:~$ gcc demo3.c -lpthread dazai@dazai:~$ ./a.out main函数创建线程t1成功 main函数创建线程t2成功 main:-1210755328 > 注:运行结果执行到一半锁死
相关 线程死锁 - (void)viewDidLoad { [super viewDidLoad]; // dispatch_queu 电玩女神/ 2023年10月17日 06:27/ 0 赞/ 24 阅读
相关 多线程什么情况下导致死锁以及如何检测 死锁:发生在并发中 互不相让:当两个(或更多)线程(进程)相互持有对方所需要的的资源,又不主动释放,导致所有人都无法继续前进,导致程序陷入无尽的阻塞,这就是死锁 多个线程造 心已赠人/ 2022年12月25日 01:54/ 0 赞/ 154 阅读
相关 线程6:什么情况造成死锁 什么情况造成死锁 1.什么是死锁: 由于互斥锁使用不当,导致多个进程无法进行下一步代码的运行。 即:两个互斥锁卡住了,以至于其它线程无法使用共享资源 2.什么 柔情只为你懂/ 2022年12月06日 04:03/ 0 赞/ 145 阅读
相关 线程死锁 线程死锁是多线程中最头疼的问题,一旦进入线程死锁,很多时候只能通过外部进程重启才能解决问题 线程到达死锁的四个条件: 互斥条件:一个资源每次只能被一个线程使用 资源独占条 港控/mmm°/ 2022年08月21日 14:43/ 0 赞/ 227 阅读
相关 线程死锁 一、死锁概念 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便 一时失言乱红尘/ 2022年06月14日 09:12/ 0 赞/ 284 阅读
相关 线程死锁 简述: 星期一,新的的一周开始,天气晴朗,风和日丽。本是一个非常不错的心情,突然微信头像闪烁,果不其然又爬虫出问题了,可谓是一入爬虫深似海,项目稳定才见鬼。 墨蓝/ 2022年06月08日 06:30/ 0 赞/ 284 阅读
相关 线程死锁 虽然同步锁机制解决了线程安全问题,但是也带来一些弊端: 1. 效率会降低,每次都需要判断锁的状态 2. 可能引发死锁(彼此占用所需要的资源),出现的概率非常小, 叁歲伎倆/ 2022年05月08日 02:38/ 0 赞/ 271 阅读
相关 线程死锁 先简单用生活列子介绍死锁, 2个人一起吃饭但是只有一双筷子,2人轮流吃(同时拥有2只筷子才能吃)。某一个时候,一个拿了左筷子,一人拿了右筷子,2个人都 ╰半夏微凉°/ 2022年04月08日 13:00/ 0 赞/ 305 阅读
相关 线程死锁 ![20190811092629898.png][] package com.vince; / 多线程要进行资源的共享,就需要同步,但同步过多,就 ゞ 浴缸里的玫瑰/ 2021年10月18日 09:36/ 0 赞/ 463 阅读
还没有评论,来说两句吧...