如果A執(zhí)行單元首先進入例程,它將持有自旋鎖;當B執(zhí)行單元試圖進入同一個例程時,將獲知自旋鎖已被持有,需等到A執(zhí)行單元釋放后才能進入。
目前創(chuàng)新互聯(lián)建站已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計、姜堰網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
跟互斥鎖一樣,一個執(zhí)行單元要想訪問被自旋鎖保護的共享資源,必須先得到鎖,在訪問完共享資源后,必須釋放鎖。
自旋鎖是采用忙等的狀態(tài)獲取鎖,所以會一直占用cpu資源,但是允許不關(guān)閉中斷的情況下,是可以被其他內(nèi)核執(zhí)行路徑搶占的(中斷嵌套的情況下,注意嵌套的中斷不能申請同一個鎖,這樣會造成死等)。
因為 open 和 release 在使用自旋鎖的時候,方法是一樣的。spin_lock 和 CPU 系統(tǒng)無關(guān),不管是單 CPU 還是多 CPU ,運行結(jié)果都是一樣的。這個邏輯關(guān)系比較難解釋,不知道你看懂我的意思沒。
你說的這個是遠程監(jiān)控和備份,需要在PC1上登錄客戶端軟件通過花生殼或其他域名服務(wù)器域名解析出去,然后你在PC2上面通過解析出來的域名登錄上去進行監(jiān)控和存儲即可。
在 x86 平臺上,spinlock 主要通過處理器的 lock 指令前綴實現(xiàn)當某個線程的一條指令訪問某個內(nèi)存的時候,其他的線程的指令無法訪問該內(nèi)存的功能。因此在 spinlock 初始化階段,將鎖變量中的值某個值 k 賦為1。
由此我們可以看出,自旋鎖是一種比較低級的保護數(shù)據(jù)結(jié)構(gòu)或代碼片段的原始方式,這種鎖可能存在兩個問題:死鎖。
自旋鎖(Spin Lock)是一種典型的對臨界資源進行互斥訪問的手段,其名稱來源于它的工作方式。為了獲得一個自旋鎖,在某CPU上運行的代碼需先執(zhí)行一個原子操作,該操作測試并設(shè)置(Test-AndSet)某個內(nèi)存變量。
自旋鎖是為實現(xiàn)保護共享資源而提出一種鎖機制。其實,自旋鎖與互斥鎖比較類似,它們都是為了解決對某項資源的互斥使用。
自旋鎖是采用忙等的狀態(tài)獲取鎖,所以會一直占用cpu資源,但是允許不關(guān)閉中斷的情況下,是可以被其他內(nèi)核執(zhí)行路徑搶占的(中斷嵌套的情況下,注意嵌套的中斷不能申請同一個鎖,這樣會造成死等)。
執(zhí)行后的輸出為:結(jié)果由于多個線程同時執(zhí)行 i++ 造成結(jié)果錯誤。到這里,我們就通過 C++ 11的原子量實現(xiàn)了一個簡單的自旋鎖。這里只是對C++原子量的一個小使用,無論是自旋鎖本身還是原子量都還有許多值得探究的地方。
1、自旋鎖 自旋鎖是采用讓當前線程不停地的在循環(huán)體內(nèi)執(zhí)行實現(xiàn)的,當循環(huán)的條件被其他線程改變時 才能進入臨界區(qū)。
2、1) 支持公平鎖,某些場景下需要獲得鎖的時間與申請鎖的時間相一致,但是synchronized做不到 2) 支持中斷處理,就是說那些持有鎖的線程一直不釋放,正在等待的線程可以放棄等待。
3、樂觀鎖和悲觀鎖的區(qū)別如下:悲觀鎖是當線程拿到資源時,就對資源上鎖,并在提交后,才釋放鎖資源,其他線程才能使用資源。
網(wǎng)站欄目:自旋鎖代碼實現(xiàn)java java自旋鎖和synchronized
標題來源:http://chinadenli.net/article34/dehoppe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站維護、營銷型網(wǎng)站建設(shè)、App設(shè)計、搜索引擎優(yōu)化、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)