分布式鎖,進程鎖,線程鎖到底是什么


在分布式集群系統的開發中,線程鎖往往並不能支持全部場景的使用,必須引入新的技術方案分布式鎖。

  線程鎖:大家都不陌生,主要用來給方法、代碼塊加鎖。當某個方法或者代碼塊使用鎖時,那么在同一時刻至多僅有有一個線程在執行該段代碼。當有多個線程訪問同一對象的加鎖方法/代碼塊時,同一時間只有一個線程在執行,其余線程必須要等待當前線程執行完之后才能執行該代碼段。但是,其余線程是可以訪問該對象中的非加鎖代碼塊的。

  進程鎖:也是為了控制同一操作系統中多個進程訪問一個共享資源,只是因為程序的獨立性,各個進程是無法控制其他進程對資源的訪問的,但是可以使用本地系統的信號量控制(操作系統基本知識)。

  分布式鎖:當多個進程不在同一個系統之中時,使用分布式鎖控制多個進程對資源的訪問。

分布式鎖到底是什么,怎么實現?

  intsmaze說簡單點,實現分布式鎖必須要依靠第三方存儲介質來存儲鎖的元數據等信息。比如分布式集群要操作某一行數據時,這個數據的流水號是唯一的,那么我們就把這個流水號作為一把鎖的id,當某進程要操作該數據時,先去第三方存儲介質中看該鎖id是否存在,如果不存在,則將該鎖id寫入,然后執對該數據的操作;當其他進程要訪問這個數據時,會先到第三方存儲介質中查看有沒有這個數據的鎖id,有的話就認為這行數據目前已經有其他進程在使用了,就會不斷地輪詢第三方存儲介質看其他進程是否釋放掉該鎖;當進程操作完該數據后,該進程就到第三方存儲介質中把該鎖id刪除掉,這樣其他輪詢的進程就能得到對該鎖的控制。

  說了這么多,再補充一點,線程鎖,進程鎖,分布式鎖的作用都是一樣的,只是作用的范圍大小不同。范圍大小:分布式鎖——大於——進程鎖——大於——線程鎖。能用線程鎖,進程鎖情況下使用分布式鎖也是可以的,能用線程鎖的情況下使用進程鎖也是可以的。只是范圍越大技術復雜度就越大。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM