實現乙個原語 通過Zookeeper實現鎖

2021-09-27 09:01:42 字數 535 閱讀 3541

關於zookeeper的功能,乙個簡單的例子就是通過鎖來實現臨界區域。我們知道有很多形式的鎖(如:讀/寫鎖、全域性鎖),通過zookeeper來實現鎖也有多種方式。這裡討論乙個簡單的方式來說明應用中如何使用zookeeper,不再考慮其它形式的鎖。

假設有乙個應用由n個程序組成,這些程序嘗試獲取乙個鎖。再次強調,zookeeper並未直接暴露原語,因此我們使用zookeeper的介面來管理znode,以此來實現鎖。為了獲得乙個鎖,每個程序p嘗試建立znode,名為/lock。如果程序p成功建立了znode,就表示它獲得了鎖並可以繼續執行其臨界區域的**。不過乙個潛在的問題是程序p可能崩潰,導致這個鎖永遠無法釋放。在這種情況下,沒有任何其它程序可以再次獲得這個鎖,整個系統可能因死鎖而失靈。為了避免這種情況,我們不得不在建立這個節點時指定/lock為臨時節點。

其它程序因znode存在而建立/lock失敗。因此,程序監聽/lock的變化,並在檢測到/lock刪除時再次嘗試建立節點來獲得鎖。當收到/lock刪除的通知時,如果程序p還需要繼續獲取鎖,它就繼續嘗試建立/lock的步驟,如果其它程序已經建立了,就繼續監聽節點。

通過鍊錶實現乙個棧

棧是乙個先進後出的資料結構,本篇文章使用鍊錶來實現乙個棧。一 定義棧的方法介面 這裡定義了棧的幾個主要方法 public inte ce istack二 實現 通過鍊錶實現棧 param public class linkedstackimplements istack 棧頂元素 節點 鍊錶最後的那...

通過兩個佇列實現乙個棧和通過兩個棧實現乙個佇列

1 思路 首先定義兩個佇列queue1 queue2和待輸入資料的陣列arr 將陣列中資料push到佇列queue1中。定義乙個srclength為陣列長度,然後將queue1中資料出到queue2中,直到queue1中剩餘乙個資料為止,將queue1中剩餘乙個資料進行出隊列印,srclength ...

通過node實現乙個簡單爬蟲功能

本人剛接觸node!通過仿照搭建實現功能 1 首先安裝node並且分別安裝這3個依賴包express cheerio superagent 命令 npm install express g npm install cheerio g npm install superagent g const ex...