亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我試了一下,這種情況下,不會出現死鎖,求原因。

我試了一下,這種情況下,不會出現死鎖,求原因。

慕尼黑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 關注
  • 72 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號