1. 程式人生 > >自旋鎖和自適應自旋鎖(不看後悔,看了必懂)

自旋鎖和自適應自旋鎖(不看後悔,看了必懂)

自旋鎖

所謂自旋,就是指當有另外一個執行緒來競爭鎖時,這個執行緒會在原地迴圈等待,而不是把該執行緒給阻塞,直到那個獲得鎖的執行緒釋放鎖之後,這個執行緒就可以馬上獲得鎖的。鎖在原地迴圈的時候,是會消耗cpu的,就相當於在執行一個啥也沒有的for迴圈。

本來一個執行緒把鎖釋放之後,當前執行緒是能夠獲得鎖的,但是假如這個時候有好幾個執行緒都在競爭這個鎖的話,那麼有可能當前執行緒會獲取不到鎖,還得原地等待繼續空迴圈消耗cup,甚至有可能一直獲取不到鎖。

基於這個問題,我們必須給執行緒空迴圈設定一個次數,當執行緒超過了這個次數,我們就認為,繼續使用自旋鎖就不適合了,此時鎖會再次膨脹,升級為重量級鎖。

自適應自旋鎖

所謂自適應自旋鎖就是執行緒空迴圈等待的自旋次數並非是固定的,而是會動態著根據實際情況來改變自旋等待的次數