自旋鎖也好,互斥鎖也罷,信號量等,當ABCD四個執行緒同時等待獲取鎖S,當鎖S被釋放后,執行緒ABCD誰能獲取到鎖S,假設ABCD按照順序發出申請鎖S的?
如果現在linux c 沒有保證按照順序獲取鎖。極端情況下,ACD總能獲取鎖,而B永遠都獲取不到,那豈不是bug?
uj5u.com熱心網友回復:
看來論壇缺少發言的高手啊。。。uj5u.com熱心網友回復:
互斥鎖和信號量不太可能出現你說情況,建議貼出代碼及測驗方法。自旋鎖是很有可能的。uj5u.com熱心網友回復:
公平鎖,這不都看CPU怎么調度的么uj5u.com熱心網友回復:
這個只能說明您設計的執行緒有問題,優先級一樣的情況下,每個執行緒執行的概率應該是對等的,不存在有不執行的執行緒,除非是ACD優先級高于B,而且ACD執行緒中不存在延時,才會導致b得不到執行。uj5u.com熱心網友回復:
linux實際是可能存在這種情況的,只是說ABCD均衡去獲取鎖的話,有一個人長時間獲取不到的概率比較低。uj5u.com熱心網友回復:
確實有這個可能呀,可是你為什么不去規避掉呢?而且概率低。。。再者,有4個執行緒去等待一個鎖,那么是不是可以考慮本身這就是一個設計缺陷,盡量2個,能少就少。少給自己挖坑呀大兄弟uj5u.com熱心網友回復:
非要這么設計的話 加個調度判斷吧 優先級一樣的話就輪流取鎖 優先級不一樣按搞得來 就幾個if else的事uj5u.com熱心網友回復:
這個就是所謂的“公平性”問題。具體情況要看鎖的實作方式。如果采用FIFO調度,就不會出現執行緒餓死的情況。轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/124688.html
標籤:內核源代碼研究區
上一篇:shell腳本命令基礎
下一篇:linux運維
