AQS雙隊列作用


今天依舊是吹爆lau哥的一天~

 

眾所周知(客套一下),AQS是使用了同步隊列+條件隊列來實現鎖機制的。

那么為什么要使用兩個隊列呢?

我看着AQS的源碼看了兩天多,記了這里忘了那里,會了這里懵了那里,最后看完了,腦袋漿糊了。

然后去問大佬。

大佬做了個簡單的比喻。(下面是轉述,不是大佬的原話,原話更加清晰,只可惜公司電腦與手機無法溝通,所以我轉述一下)

說這個機制就像是上廁所,大家都在排隊上廁所,但是坑就只有一個,每個人都在自旋,判斷自己是不是第一個,如果是第一個就去嘗試獲得廁所的使用權,當正在上廁所的人上完了,釋放廁所使用權,那么他就可以進去,然后下一個變成第一個,等待。這段就是同步隊列的基本邏輯。

但是上廁所也有大號小號,所以廁所管理員會把不那么急切的上小號的人放到條件隊列里面去。當急切的人上完了,再把他們移轉導同步隊列去,按照之前的邏輯進行獲取。

坑==資源

大號排隊==同步隊列

小號排隊==條件隊列


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM