一種分布式系統(tǒng)中多線程同步的方法和系統(tǒng)的制作方法
【技術領域】
[0001]本發(fā)明涉及計算機及其軟件技術領域,特別地涉及一種分布式系統(tǒng)中多線程同步的方法和系統(tǒng)。
【背景技術】
[0002]當使用多個線程來訪問同一個數(shù)據(jù)時,非常容易出現(xiàn)安全問題,例如:多個線程都在操作同一數(shù)據(jù)導致數(shù)據(jù)不一致的問題等。因此,我們需要用同步機制來解決這些問題,也就是線程同步。線程同步是指在多個線程同時訪問同一資源的時候,需要保證該資源每次只能被一個線程獨占?,F(xiàn)在主流的做法是對數(shù)據(jù)分塊,達到數(shù)據(jù)隔離。但是,有些應用不得不利用分布式系統(tǒng)中的線程同步。
[0003]在分布式系統(tǒng)中,由于應用程序部署在不同的機器上,而在不同機器之間,程序無法共享使用內存信息,所以不同機器的多個線程間的同步是困難的。因此,分布式同步是程序開發(fā)的時候盡量需要避免的。
[0004]現(xiàn)有的分布式系統(tǒng)中線程同步的方法主要是,所有線程都通過指定的緩存中間件(或者數(shù)據(jù)庫)來修改指定資源記錄的占有狀態(tài),這些中間件本身是具有原子性。當多個線程同時去修改某個資源狀態(tài)的時候,最多只有一個線程能夠修改成功。此處,修改成功的就可以被認為是搶占資源成功。
[0005]然而,現(xiàn)有的分布式系統(tǒng)中線程同步的方法具有如下的缺陷:
[0006]1、所有線程都是通過主動輪詢的方式來查詢是否可以訪問資源,效率低;并且當資源被釋放后,缺少通知同步線程的機制;
[0007]2、不支持靈活自定義的多條件的線程同步,S卩:各個線程可根據(jù)自定義的條件主動選擇阻塞或者根據(jù)自定義的條件喚醒相應的線程。
【發(fā)明內容】
[0008]有鑒于此,本發(fā)明提供一種分布式系統(tǒng)中多線程同步的方法和系統(tǒng),通過異步監(jiān)聽實現(xiàn)分布式系統(tǒng)中的多線程同步,能夠支持自定義條件對線程同步的靈活控制,做到線程主動釋放資源以及精確喚醒相關等待線程,資源利用率高。
[0009]為實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了一種分布式系統(tǒng)中多線程同步的方法。
[0010]—種分布式系統(tǒng)中多線程同步的方法,包括:接收線程的資源控制請求,所述請求具有參數(shù),所述參數(shù)包括所述線程的標識和所請求資源的資源名;根據(jù)所述資源名讀取所述資源的資源節(jié)點的數(shù)據(jù);嘗試鎖定所述資源,其中當鎖定失敗,把該線程的標識置于該資源的等待隊列以使得該線程進入阻塞狀態(tài),當鎖定成功,則該線程控制該資源,并且待所述線程利用所述資源完成執(zhí)行后,釋放所述資源,并喚醒該資源的等待隊列中的其他線程,其中被喚醒的線程能夠嘗試鎖定所述資源。
[0011 ]可選地,讀取所述資源的資源節(jié)點的數(shù)據(jù)的步驟包括:當所述資源存在,則直接獲取所述資源的資源節(jié)點,否則根據(jù)所述資源名創(chuàng)建相應的資源節(jié)點,并讀取所述資源節(jié)點的數(shù)據(jù)。
[0012]可選地,讀取所述資源的資源節(jié)點的數(shù)據(jù)之后,還包括:對所述資源進行校驗,以確定所述資源有效且未被鎖定。
[0013]可選地,還包括:通過在所述資源節(jié)點下創(chuàng)建資源鎖定節(jié)點來鎖定所述資源,并通過刪除所述資源鎖定節(jié)點來釋放所述資源。
[0014]可選地,所述資源節(jié)點下包含如下部分,其中,同步隊列,所述同步隊列包括等待控制所述資源的線程;占用線程,所述占用線程是當前控制所述資源的線程;自定義條件集合,所述自定義條件集合中的每個條件具有等待隊列。
[0015]可選地,線程在控制所述資源后,如果發(fā)現(xiàn)所述自定義條件集合中的條件不滿足,則釋放所述資源并進入阻塞狀態(tài),且該線程的標識被置于該條件的等待隊列。
[0016]可選地,當所述自定義條件集合中的條件滿足后,把該條件的等待隊列中的線程從該條件的等待隊列移動到所述資源的等待隊列。
[0017]根據(jù)本發(fā)明的另一方面,提供了一種分布式系統(tǒng)中多線程同步的系統(tǒng)。
[0018]—種分布式系統(tǒng)中多線程同步的系統(tǒng),包括:用于接收線程的資源控制請求的裝置,所述請求具有參數(shù),所述參數(shù)包括所述線程的標識和所請求資源的資源名;用于根據(jù)所述資源名讀取所述資源的資源節(jié)點的數(shù)據(jù)的裝置;用于嘗試鎖定所述資源的裝置,其中當鎖定失敗,把該線程的標識置于該資源的等待隊列以使得該線程進入阻塞狀態(tài),當鎖定成功,則該線程控制該資源,并且待所述線程利用所述資源完成執(zhí)行后,釋放所述資源,并喚醒該資源的等待隊列中的其他線程,其中被喚醒的線程能夠嘗試鎖定所述資源。
[0019]可選地,所述資源節(jié)點下包含如下部分,其中,同步隊列,所述同步隊列包括等待控制所述資源的線程;占用線程,所述占用線程是當前控制所述資源的線程;自定義條件集合,所述自定義條件集合中的每個條件具有等待隊列。
[0020]可選地,線程在控制所述資源后,如果發(fā)現(xiàn)所述自定義條件集合中的條件不滿足,則釋放所述資源并進入阻塞狀態(tài),且該線程的標識被置于該條件的等待隊列。
[0021]可選地,當所述自定義條件集合中的條件滿足后,把該條件的等待隊列中的線程從該條件的等待隊列移動到所述資源的等待隊列。
[0022]根據(jù)本發(fā)明的又一方面,提供了一種分布式系統(tǒng)中多線程同步的系統(tǒng)。
[0023]一種分布式系統(tǒng)中多線程同步的系統(tǒng),包括:存儲器和處理器,其中,所述存儲器存儲指令;所述處理器執(zhí)行所述指令用于:接收線程的資源控制請求,所述請求具有參數(shù),所述參數(shù)包括所述線程的標識和所請求資源的資源名;根據(jù)所述資源名讀取所述資源的資源節(jié)點的數(shù)據(jù);嘗試鎖定所述資源,其中當鎖定失敗,把該線程的標識置于該資源的等待隊列以使得該線程進入阻塞狀態(tài),當鎖定成功,則該線程控制該資源,并且待所述線程利用所述資源完成執(zhí)行后,釋放所述資源,并喚醒該資源的等待隊列中的其他線程,其中被喚醒的線程能夠嘗試鎖定所述資源。
[0024]根據(jù)本發(fā)明的技術方案,通過基于分布式線程同步組件Zookeeper實現(xiàn)分布式系統(tǒng)中多機器線程對資源的控制和主動釋放,利用Zookeeper的回調監(jiān)聽機制來通知客戶端進行相關線程的分布式同步調用資源,極大提高了分布式線程同步的效率;同時本發(fā)明還支持自定義條件對線程同步的靈活控制,從而做到了線程主動釋放資源以及根據(jù)自定義條件喚醒相關線程,進而可以控制線程的執(zhí)行順序,且資源利用率高。
【附圖說明】
[0025]附圖用于更好地理解本發(fā)明,不構成對本發(fā)明的不當限定。其中:
[0026]圖1是根據(jù)本發(fā)明實施方式的分布式系統(tǒng)中多線程同步的方法的主要步驟示意圖;
[0027]圖2是本發(fā)明實施例的多線程同步樹形結構圖;
[0028]圖3是本發(fā)明實施例的多線程獲取資源的流程圖;
[0029]圖4是根據(jù)本發(fā)明實施方式的分布式系統(tǒng)中多線程同步的系統(tǒng)的主要模塊示意圖。
【具體實施方式】
[0030]以下結合附圖對本發(fā)明的示范性實施例做出說明,其中包括本發(fā)明實施例的各種細節(jié)以助于理解,應當將它們認為僅僅是示范性的。因此,本領域普通技術人員應當認識至IJ,可以對這里描述的實施例做出各種改變和修改,而不會背離本發(fā)明的范圍和精神。同樣,為了清楚和簡明,以下的描述中省略了對公知功能和結構的描述。
[0031]圖1是根據(jù)本發(fā)明實施方式的分布式系統(tǒng)中多線程同步的方法的主要步驟示意圖。如圖1所示,本發(fā)明的分布式系統(tǒng)中多線程同步的方法主要包括如下的步驟Sll至步驟S13。
[0032]步驟Sll:接收線程的資源控制請求,該請求具有參數(shù),參數(shù)包括線程的標識和所請求資源的資源名;
[0033]步驟S12:根據(jù)資源名讀取資源的資源節(jié)點的數(shù)據(jù);
[0034]步驟S13:嘗試鎖定資源,其中當鎖定失敗,把該線程的標識置于該資源的等待隊列以使得該線程進入阻塞狀態(tài),當鎖定成功,則該線程控制該資源,并且待該線程利用該資源完成執(zhí)行后,釋放該資源,并喚醒該資源的等待隊列中的其他線程,其中被喚醒的線程能夠嘗試鎖定該資源。
[0035]其中,步驟S12中讀取資源的資源節(jié)點的數(shù)據(jù)的步驟包括:當所述資源存在,則直接獲取所述資源的資源節(jié)點,否則根據(jù)所述資源名創(chuàng)建相應的資源節(jié)點,并讀取所述資源節(jié)點的數(shù)據(jù)。
[0036]并且,在讀取資源的資源節(jié)點的數(shù)據(jù)之后,還可以包括:對所述資源進行校驗,以確定所述資源有效且未被鎖定。
[0037]根據(jù)本發(fā)明的技術方案,通過在所述資