企業(yè)開展網(wǎng)站建設(shè)廣告聯(lián)盟有哪些
你是怎么理解樂觀鎖和悲觀鎖的,具體怎么實(shí)現(xiàn)呢?
悲觀鎖認(rèn)為多個(gè)線程訪問同一個(gè)共享變量沖突的概率較大, 會(huì)在每次訪問共享變量之前都去真正加鎖
樂觀鎖認(rèn)為多個(gè)線程訪問同一個(gè)共享變量沖突的概率不大. 并不會(huì)真的加鎖, 而是直接嘗試訪問數(shù)據(jù). 在訪問的同時(shí)識(shí)別當(dāng)前的數(shù)據(jù)是否出現(xiàn)訪問沖突.
悲觀鎖的實(shí)現(xiàn)就是先加鎖(比如借助操作系統(tǒng)提供的 mutex), 獲取到鎖再操作數(shù)據(jù). 獲取不到鎖就等待.
樂觀鎖的實(shí)現(xiàn)可以引入一個(gè)版本號(hào). 借助版本號(hào)識(shí)別出當(dāng)前的數(shù)據(jù)訪問是否沖突.
?
介紹下讀寫鎖?
讀寫鎖就是把讀操作和寫操作分別進(jìn)行加鎖.
讀鎖和讀鎖之間不互斥.
寫鎖和寫鎖之間互斥.
寫鎖和讀鎖之間互斥.
讀寫鎖最主要用在 "頻繁讀, 不頻繁寫" 的場(chǎng)景中
什么是自旋鎖,為什么要使用自旋鎖策略呢,缺點(diǎn)是什么?
如果獲取鎖失敗, 立即再嘗試獲取鎖, 無限循環(huán), 直到獲取到鎖為止. 第一次獲取鎖失敗, 第二次的嘗
試會(huì)在極短的時(shí)間內(nèi)到來. 一旦鎖被其他線程釋放, 就能第一時(shí)間獲取到鎖.
相比于掛起等待鎖,
優(yōu)點(diǎn): 沒有放棄 CPU 資源, 一旦鎖被釋放就能第一時(shí)間獲取到鎖, 更高效. 在鎖持有時(shí)間比較短的場(chǎng)
景下非常有用.
缺點(diǎn): 如果鎖的持有時(shí)間較長(zhǎng), 就會(huì)浪費(fèi) CPU 資源
?
synchronized 是可重入鎖么?
是可重入鎖.
可重入鎖指的就是連續(xù)兩次加鎖不會(huì)導(dǎo)致死鎖.
實(shí)現(xiàn)的方式是在鎖中記錄該鎖持有的線程身份, 以及一個(gè)計(jì)數(shù)器(記錄加鎖次數(shù)). 如果發(fā)現(xiàn)當(dāng)前加鎖
的線程就是持有鎖的線程, 則直接計(jì)數(shù)自增.
?