色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

如何理解互斥鎖條件鎖讀寫鎖以及自旋鎖

呂致盈2年前19瀏覽0評論

如何理解互斥鎖條件鎖讀寫鎖以及自旋鎖?

只要是程序員,不管是web開發(fā)還是軟件開發(fā),只要涉及到數(shù)據(jù)一致性等方面的操作,都離不開鎖,而鎖也分很多種,在數(shù)據(jù)庫操作過程中,有樂觀鎖,悲觀鎖等等。下面,我們先對題主的問題進(jìn)行講解。

互斥鎖

當(dāng)共享的資源是互斥的時候,每當(dāng)一個對象獲得了資源的使用權(quán)的時候,就要對這個資源加鎖,避免再背其他對象獲取。這個時候,其他對象都會陷入阻塞狀態(tài),要等到有使用權(quán)的對象釋放鎖之后,才會喚醒目前排在第一位的下一個對象。

這個像很多學(xué)生排隊等老師批作業(yè)。老師作為唯一資源,被很多對象(學(xué)生)需要,但是老師同時只能批改一個學(xué)生的隨堂作業(yè),因此當(dāng)?shù)谝粋€完成作業(yè)的同學(xué)到講臺上的時候,他就占用了老師這個資源,相當(dāng)于上了一個互斥鎖。其他完成作業(yè)的同學(xué),必須坐在座位上,等老師喊,“下一個”,才能有機(jī)會獲取被老師批改作業(yè)的機(jī)會。

條件鎖

條件鎖使用場景是當(dāng)某個對象明明已經(jīng)獲取了某個鎖,但是因為其他條件沒滿足,要繼續(xù)等待直到該條件滿足,這個時候就要用到條件鎖。這種情況下,對象會在這個條件上發(fā)生阻塞,當(dāng)其他對象發(fā)現(xiàn)這個條件滿足了的時候,就可以喚醒這個對象,讓它去使用資源了。

這個例子就好像學(xué)生A和學(xué)生B共同出資買了一個游戲機(jī),他們約定開機(jī)密碼A記住前三位,B記住后三位,只有雙方都在的時候才能玩。晚上,A把游戲機(jī)(資源)拿回家,明明已經(jīng)資源在手,但是由于其他條件不滿足(A不知道后面三位密碼),所以一定要等到B也在的第二天,A才能玩上游戲機(jī)。

讀寫鎖

讀寫鎖并不是一把鎖,而是兩把,分別是讀鎖,寫鎖。

只有一個對象可以有寫鎖,但是可以多個對象有讀鎖。

當(dāng)一個對象要修改一個資源數(shù)據(jù)的時候,就會要對資源上一把寫鎖,這時候,任何人都不能來拿鎖,包括寫鎖和讀鎖。

當(dāng)一個對象要讀一個資源數(shù)據(jù)的時候,它就要對資源上一把讀鎖,這個時候,其他人也可以來一起上讀鎖,但是不可以上寫鎖。

舉個例子,假設(shè)網(wǎng)絡(luò)小說作家在線寫作。

當(dāng)他開始寫作的時候,其他人都看不到他正在寫的文章,等他釋放了寫鎖,即把文章發(fā)出去之后,大家都可以來看了(多人拿到讀鎖),但是這個時候,只要還有任何一個讀者在看他發(fā)布的小說,他就不能對這篇小說做修改(讀鎖未釋放,寫鎖不能上)。

自旋鎖

這是一個特殊的互斥鎖,當(dāng)數(shù)據(jù)被加了鎖之后,其他來想要拿鎖的其他對象不會被陷入休眠阻塞態(tài),而是會輪詢資源狀態(tài),直到資源剛好被釋放。這樣做的好處是能夠減少喚醒對象的消耗, 但是相對來說,卻會消耗CPU的資源。繼續(xù)用上面老師批改作業(yè)的例子,就是完成了作業(yè)小朋友不用在座位上等老師叫了,而是過一會兒就去問老師,“老師你批改完了嗎”,這樣做的好處當(dāng)然就是一旦老師批改完了當(dāng)前學(xué)生的作業(yè),就會立刻開始批改下一個來問的學(xué)生作業(yè),但是壞處自然就是容易把老師給問煩了,說不定批評你(消耗CPU資源)。

以上是我的淺見,歡迎各位在下方評論區(qū)點(diǎn)贊留言。

我是蘇蘇思量,來自BAT的Java開發(fā)工程師,每日分享科技類見聞,歡迎各位關(guān)注我,與我共同進(jìn)步。

java共享鎖,如何理解互斥鎖條件鎖讀寫鎖以及自旋鎖