簡體   English   中英

不公平鎖如何比公平鎖有更好的性能?

[英]How does unfair lock have better performance than fair lock?

接口Lock有一個有用的布爾公平參數來保證鎖定的公平性-等待鎖定時間最長的線程,首先獲得鎖定 我想我想在任何地方使用它,因為它可以防止飢餓 好吧,在我讀到它會降低我們的性能之前。

我找不到這個問題的答案,所以我希望有人能解決這個問題。 意思是,采用“尊重”公平的線程和不尊重公平的線程有什么區別? 它們不是都存儲在其他等待線程所在的“普通”隊列中嗎?

首先,具有這種fairness的不是interface Lock ,而是ReentrantLock

發出Lock::lock的線程可能根本不會被放入隊列中,無論處於fair還是unfair模式。

unfair模式稍微容易理解。 在這種模式下,請求鎖的線程(通過調用Lock::lock )會嘗試立即獲取它而不會被排隊。 如果成功 - 完成。 它不會被放入任何隊列,因為它可以獲得鎖。 請注意,這並不關心隊列中是否已經有等待線程,因此它是“不公平的”(對於其他已經等待的線程)。 如果它無法獲取鎖(意味着其他人擁有它),則將其放入隊列中。

另一方面,在fair模式下,調用lock的線程首先必須檢查是否已經有線程在等待這個鎖。 如果沒有這樣的線程並且它可以獲取鎖:沒有入隊並獲取鎖。 如果它不能 - 它被排隊。

最后一點是,在兼顧公平和不公平的模式,線程都放在同一個隊列; 也就是說: fair/unfair與隊列的內部表示無關。

當一個鎖被釋放,並且有多個線程在等待它時,等待時間最長的線程是最有可能發現它想要的內存頁在它“休眠”時被換出的線程。 休眠時間最少的線程最有可能“准備就緒”。


如果這就是你想說的,向@xingbin 道歉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM