为了账号安全,请及时绑定邮箱和手机立即绑定

我试了一下,这种情况下,不会出现死锁,求原因。

我试了一下,这种情况下,不会出现死锁,求原因。

慕尼黑8549860 2023-03-03 18:14:04
void*pthread_producer();{while(1){pthread_mutex_lock(&mutex_p);…………pthread_mutex_unlock(&mutex_p)}}void*pthread_consumer(void*){while(1){pthread_mutex_lock(&mutex_c)…... void* pthread_producer( ); { while (1) { pthread_mutex_lock( &mutex_p ); ………… pthread_mutex_unlock( &mutex_p ) } } void* pthread_consumer( void* ) { while (1) { pthread_mutex_lock( &mutex_c ) ………… pthread_mutex_unlock( &mutex_c); } } 我们知道,两把锁,mutex_p, mutex_c,这种情况容易出现死锁,即 mutex_p 锁上,还未解锁即跳到第二条线程,mutex_c锁上,未解锁即跳到第一条线程,这样即出现死锁。 但是在这里将两把锁用成一把锁,如:将mutex_c改为mutex_p。 因为线程是随意跳的,如果一线程锁上,为解锁即跳到二线程,此时,二线程也锁上,跳到一线程,那么一线程和二线程不是也读锁上了么?,不是就死锁了么?
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

如果你将mutex_c换成mutex_p,则不会死锁,因为,你第一个线程锁上后,切换到第二个线程,因为mutex_p未释放,第二个线程无法获取mutex_p,进入等待状态,此时OS将再次调度第一个线程,直到第一个线程释放mutex_p之后,第二个线程才会被激活,然后调试第二线程,获取mutex_p.
使用OS提供的互斥量来保护公共资源还是比较安全的,但如果用二值信号量的话,就可能会有优先级反转的情况.

查看完整回答
反对 回复 2023-03-06
  • 1 回答
  • 0 关注
  • 42 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信