我正在開展一項學術研究,嘗試開發一種編程工具來協助實現細粒度的鎖定函數,用於維護樹狀數據結構的併發程序。例如,程序員可以編寫一些接收樹根節點並修改樹(通過遍歷某些路由並添加/刪除節點)的函數,該工具將幫助他找到代碼節點中的哪個部分應該被鎖定以及它們可以被釋放的位置 - 因此這些功能可以在同一棵樹上同時執行。使用細粒度鎖的代碼示例(JCR Jackrabbit?)
我正在尋找一些真實的代碼示例,其中使用了這種細粒度的鎖定,或者它可以用於獲得更好的性能,但程序員卻懶得實現它(例如,他鎖定了整個在函數調用期間不釋放無用的節點)。
我讀到JCR &兔崽子,它使用一個樹狀結構的數據庫,發現解釋瞭如何在JCR鎖定節點(但沒有實例)的一篇文章: http://www.day.com/specs/jcr/2.0/17_Locking.html
我有一個非常小的背景數據庫,我不完全理解什麼是允許的,什麼是不允許的,當涉及到Jackrabbit數據庫和併發。從2個線程訪問相同的節點是不允許的,但不同的儲存庫呢?如果兩個不同的客戶端嘗試訪問同一個節點會發生什麼情況(例如,一個嘗試刪除它,另一個嘗試修改它 - session.save()會失敗嗎?)。
感謝, 奧倫
您也可以在Adobe論壇中查詢CQ5(http://forums.adobe.com/community/digital_marketing_suite/cq5)。 CQ5實施的JCR,被稱爲CRX,是Apache Jackrabbit的商業版本。 –
你想留在JCR的境界嗎?你對其他技術開放嗎? –
Clojure社區對併發性有很多想法,那是它的驅動之一。請參閱http://clojure.org/concurrent_programming - 在許多情況下,暗示在實踐中,程序員在沒有明確使用鎖的情況下創建更好的程序。這就是爲什麼Clojure提供的方法與傳統的Java鎖定有很大不同。如果你願意,我們可以找到很多Clojure代碼示例。 –