国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種集群中鎖管理的方法、鎖服務器及客戶端與流程

      文檔序號:11450434閱讀:371來源:國知局
      一種集群中鎖管理的方法、鎖服務器及客戶端與流程

      本發(fā)明涉及信息技術領域,特別涉及一種集群中鎖管理的方法、服務器及客戶端。



      背景技術:

      在集群中包含多個客戶端,一個客戶端為獲得集群中的共享資源的處理權限,如寫權限,或者讀取權限,需要向集群中的鎖服務器申請?zhí)幚頇嘞?,通常稱為申請鎖。通常寫權限也稱為寫鎖,或排他鎖,讀取權限稱為讀鎖或共享鎖。

      現有技術客戶端申請寫鎖的方式,如圖1所示,集群中包括鎖服務器、客戶端a和客戶端b??蛻舳薬使用遠程直接內存訪問(remotedirectmemoryaccess,rdma)協議向鎖服務器的內存地址寫入客戶端a的標識,如使用rdma協議中的原子操作compare-and-swap向鎖服務器申請寫鎖,即客戶端a向鎖服務器申請到寫鎖,即將寫鎖分配給客戶端a??蛻舳薭使用compare-and-swap向鎖服務器申請寫鎖,鎖服務器向客戶端b返回客戶端a的標識,客戶端b根據客戶端a的標識使用compare-and-swap向客戶端a申請寫鎖,在客戶端a釋放寫鎖前,客戶端b處于寫鎖等待狀態(tài)。

      現有技術的實現方案中,客戶端a故障,由于鎖服務器不知道客戶端b處于寫鎖等待狀態(tài),導致客戶端b無法申請到寫鎖,始終處于寫鎖等待狀態(tài)。由上述描述可知,現有技術中鎖服務器只能獲得當前一個客戶端的鎖的狀態(tài)。



      技術實現要素:

      第一方面,本發(fā)明實施例提供了一種集群中鎖管理方法,集群中包含多個客戶端和鎖服務器,鎖服務器包含接口卡和內存,內存中存儲有寫鎖請求隊列、寫鎖分配標識和讀鎖分配計數;其中,寫鎖請求隊列用于記錄集群中針對同一共享資源處于寫鎖等待狀態(tài)和獲得寫鎖的客戶端的標識,寫鎖分配標識用于表示是否分配針對共享資源的寫鎖,讀鎖分配計數用于表示針對共享資源分配讀鎖的數量;鎖管理方法包括:接口卡接收多個客戶端中的第一客戶端發(fā)送的第一寫鎖請求,第一寫鎖請求攜帶第一客戶端的標識和寫鎖請求隊列隊首的內存地址,將第一客戶端的標識寫入寫鎖請求隊列隊首的內存地址;接口卡查詢讀鎖分配計數確定是否已經分配讀鎖,當沒有分配讀鎖,將寫鎖分配標識置為已經分配寫鎖狀態(tài),向第一客戶端發(fā)送消息,表明第一客戶端獲得寫鎖;

      當已經分配讀鎖,接口卡向第一客戶端發(fā)送第二消息,第二消息表明第一客戶端處于寫鎖等待狀態(tài)。本發(fā)明實施例通過內存中的寫鎖請求隊列、寫鎖分配標識和讀鎖分配計數,鎖服務器可以確定客戶端獲得寫鎖和處于寫鎖等待。

      結合第一方面,在第一種可能的實現方式中,集群還包括第二客戶端,接口卡接收多個客戶端中的第二客戶端發(fā)送的第二寫鎖請求;第二寫鎖請求攜帶第二客戶端的標識和寫鎖請求隊列的第一內存地址;第一內存地址為從隊首到隊尾的順序中,除寫鎖請求隊列隊首內存地址外可寫入第二客戶端的標識的內存地址;接口卡將第二客戶端的標識寫入寫鎖請求隊列的第一內存地址;接口卡向第二客戶端發(fā)送消息表明第二客戶端處于寫等待狀態(tài)。因此,鎖服務器可通過寫鎖請求隊列確定處于寫鎖等待狀態(tài)的客戶端??蛇x的,第一內存地址為從隊首到隊尾的順序中,除寫鎖請求隊列隊首內存地址外第一個可寫入第二客戶端的標識的內存地址

      結合第一方面,在第二種可能的實現方式中,鎖服務器的內存包括讀鎖請求隊列,當讀鎖分配計數表明已經分配讀鎖,讀鎖請求隊列用于記錄集群中針對共享資源獲得讀鎖的第三客戶端的標識。

      結合第一種可能的實現方式,在第三種可能的實現方式中,第一寫鎖請求還攜帶鎖租約;鎖租約用于表明寫鎖的有效期。通過鎖租約,鎖服務器可根據鎖租約釋放寫鎖。

      結合第一種可能的實現方式,在第四種可能的實現方式中,當第一客戶端獲得寫鎖后,接口卡接收第一客戶端發(fā)送的寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址;接口卡將寫鎖分配標識置為未分配寫鎖狀態(tài),將第一客戶端的標識從寫鎖請求隊列隊首的內存地址中刪除。第一客戶端釋放寫鎖,從而使集群中其他客戶端可以獲得寫鎖。

      結合第一種可能的實現方式,在第五種可能的實現方式中,當第一客戶端獲得寫鎖后發(fā)生故障,接口卡將寫鎖分配標識置為未分配寫鎖狀態(tài),將第一客戶端的標識從寫鎖請求隊列隊首的內存地址中刪除。可選地,接口卡接收集群中其他客戶端發(fā)送的通知確定第一客戶端故障。將故障的第一客戶端的寫鎖釋放,可以防止故障的第一客戶端長期持有寫鎖??蛇x的,接口卡向集群中除第一客戶端外的客戶端發(fā)送通知,通知表明已經釋放了第一客戶端持有的寫鎖。

      結合第四種或第五種可能的實現方式,在第六種可能的實現方式中,還包括接口卡查詢寫鎖請求隊列確定處于寫鎖等待狀態(tài)的第二客戶端;接口卡向第二客戶端發(fā)送通知,通知第二客戶端向接口卡申請寫鎖。鎖服務器通知處于寫鎖等待狀態(tài)的客戶端及時申請寫鎖。

      結合第五種可能的實現方式,在第七種可能的實現方式中,接口卡向集群中除第一客戶端外的客戶端發(fā)送通知,通知表明已經釋放了第一客戶端持有的寫鎖。

      結合第四種可能的實現方式,在第八種可能的實現方式中,還包括,接口卡接收第一客戶端發(fā)送的寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列隊首開始的下一個內存地址,接口卡查詢寫鎖請求隊列隊首開始的下一個內存地址存儲的客戶端的標識,接口卡向第一客戶端發(fā)送查詢寫鎖請求查詢響應消息,寫鎖請求查詢響應消息中攜帶下一個內存地址存儲的客戶端的標識。

      結合第四種可能的實現方式,在第九種可能的實現方式中,還包括,接口卡查詢寫鎖請求隊列隊首開始的下一個內存地址存儲的客戶端的標識,接口卡向下一個內存地址存儲的客戶端的標識對應的客戶端發(fā)送通知,通知下一個內存地址存儲的客戶端的標識對應的客戶端申請寫鎖。從而可根據處于寫鎖等待狀態(tài)的客戶端在寫鎖請求隊列中從隊首開始的順序申請寫鎖。

      結合第四種可能的實現方式,在第十種可能的實現方式中,寫鎖請求隊列中還存儲處于寫鎖等待狀態(tài)的客戶端的寫鎖優(yōu)先級,還包括,接口卡接收第一客戶端發(fā)送的寫鎖請求查詢消息,接口卡查詢寫鎖請求隊列中處于寫鎖等待狀態(tài)的客戶端的寫鎖優(yōu)先級,接口卡向第一客戶端發(fā)送寫鎖請求查詢響應消息,查詢響應消息中攜帶寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端的標識及寫鎖優(yōu)先級。

      結合第四種可能的實現方式,在第十一種可能的實現方式中,寫鎖請求隊列中還存儲處于寫鎖等待狀態(tài)的客戶端的寫鎖優(yōu)先級,還包括:接口卡查詢寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端的寫鎖優(yōu)先級確定寫鎖優(yōu)先級最高的客戶端,接口卡向寫鎖優(yōu)先級最高的客戶端發(fā)送通知,通知寫鎖優(yōu)先級最高的客戶端申請寫鎖,從而使寫鎖優(yōu)先級最高的客戶端申請寫鎖。

      結合第四種可能的實現方式,在第十二種可能的實現方式中,還包括:接口卡查詢寫鎖請求隊列確定處于寫鎖等待狀態(tài)的客戶端,接口卡向處于寫鎖等待狀態(tài)的客戶端中的至少兩個客戶端發(fā)送通知,指示至少兩個客戶端向接口卡發(fā)送寫鎖請求。

      與第一方面相對應,第二方面,本發(fā)明實施例提供了一種集群中鎖管理方法,集群包含多個客戶端和鎖服務器,鎖服務器包含接口卡和內存,內存中存儲有寫鎖請求隊列、寫鎖分配標識和讀鎖分配計數;其中,寫鎖請求隊列用于記錄集群中針對同一共享資源處于寫鎖等待狀態(tài)和獲得寫鎖的客戶端的標識,寫鎖分配標識用于表示是否分配針對共享資源的寫鎖,讀鎖分配計數用于表示針對共享資源分配讀鎖的數量;鎖管理方法包括:

      多個客戶端中的第一客戶端向鎖服務器的接口卡發(fā)送第一寫鎖請求;第一寫鎖請求攜帶第一客戶端的標識和寫鎖請求隊列隊首的內存地址;

      第一客戶端接收接口卡發(fā)送的第一消息,第一消息表明接口卡將第一客戶端的標識寫入寫鎖請求隊列隊首的內存地址以及表明第一客戶端獲得寫鎖或處于寫鎖等待狀態(tài);當第一消息表明接口卡將第一客戶端的標識寫入寫鎖請求隊列隊首的內存地址失敗,第一客戶端向接口卡發(fā)送第二寫鎖請求;第二寫鎖請求攜帶第一客戶端的標識和寫鎖請求隊列的第一內存地址;第一內存地址為從隊首到隊尾的順序中,可寫入第一客戶端的標識的內存地址??蛇x的,第一內存地址為從隊首到隊尾的順序中,第一個可寫入第一客戶端的標識的內存地址。

      結合第二方面第一種可能的實現方式,在第一種可能的實現方式中,第一寫鎖請求和第二寫鎖請求還攜帶鎖租約;鎖租約用于表明寫鎖的有效期。鎖服務器可以根據鎖租約釋放第一客戶端到期的寫鎖,防止第一客戶端長期占用寫鎖。

      結合第二方面,在第二種可能的實現方式中,當第一客戶端獲得寫鎖后,第一客戶端向接口卡發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址。

      結合第二種可能的實現方式,在第三種可能的實現方式中,還包括:第一客戶端向接口卡發(fā)送寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列隊首開始的下一個內存地址,接收接口卡發(fā)送的寫鎖請求查詢響應消息,寫鎖請求查詢響應消息中攜帶寫鎖請求隊列隊首開始的下一個內存地址存儲的客戶端的標識,第一客戶端根據寫鎖請求查詢響應消息攜帶的客戶端的標識向寫鎖請求隊列隊首開始的下一個內存地址存儲的客戶端的標識對應的客戶端發(fā)送通知指示申請寫鎖。

      結合第二種可能的實現方式,在第四種可能的實現方式中,還包括:第一客戶端向接口卡發(fā)送寫鎖請求查詢消息,接收接口卡發(fā)送的寫鎖請求查詢響應消息,查詢響應消息中攜帶寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端的標識及寫鎖優(yōu)先級,第一客戶端根據寫鎖請求查詢響應消息確定寫鎖優(yōu)先級最高的客戶端,第一客戶端向寫鎖優(yōu)先級最高的客戶端發(fā)送通知,指示寫鎖優(yōu)先級最高的客戶端向接口卡發(fā)送寫鎖請求。

      第三方面,本發(fā)明實施例提供了另一種集群中鎖管理方法,集群包含第一客戶端和鎖服務器,鎖服務器包含接口卡和內存,內存中存儲有讀鎖請求隊列和寫鎖分配標識;其中,讀鎖請求隊列用于記錄集群中針對同一共享資源處于讀鎖等待狀態(tài)或獲得讀鎖的客戶端的標識,寫鎖分配標識用于表示是否分配針對共享資源的寫鎖;鎖管理方法包括:接口卡接收多個客戶端中的第一客戶端發(fā)送的第一讀鎖請求;第一讀鎖請求攜帶第一客戶端的標識和讀鎖請求隊列的第一內存地址;接口卡將第一客戶端的標識寫入讀鎖請求隊列的第一內存地址,接口卡向第一客戶端發(fā)送第一消息;第一消息攜帶寫鎖分配標識。通過讀鎖請求隊列能夠記錄集群中客戶端讀鎖請求狀態(tài),客戶端處于讀鎖等待狀態(tài)或獲得讀鎖。

      結合第三方面,在第一種可能的實現方式中,當寫鎖分配標識表明已經分配了寫鎖,則第一消息表明第一客戶端處于讀鎖等待狀態(tài)。

      結合第三方面,在第二種可能的實現方式中,內存還存儲有讀鎖分配計數,讀鎖分配計數用于表示針對共享資源分配讀鎖的數量;當寫鎖分配標識表明沒有分配寫鎖,接口卡根據為第一客戶端分配的讀鎖數量增加讀鎖分配計數,則第一消息表明第一客戶端獲得讀鎖。

      結合第三方面第一種可能的實現方式,在第三種可能的實現方式中,多個客戶端中還包括第二客戶端,內存中還存儲寫鎖請求隊列,寫鎖請求隊列用于記錄集群中針對共享資源處于寫鎖等待狀態(tài)和獲得寫鎖的客戶端的標識;當寫鎖分配標識表明已經分配了寫鎖,寫鎖請求隊列隊首的內存地址中存儲第二客戶端的標識。鎖服務器內存中寫鎖請求隊列記錄獲得寫鎖的客戶端,因為已經分配了寫鎖,讀鎖請求隊列中的客戶端處于讀鎖等待狀態(tài),因此,鎖服務器中記錄了獲得寫鎖的客戶端的信息,同時也記錄了處于讀鎖等待狀態(tài)的客戶端的信息。

      結合第三方面,在第四種可能的實現方式中,多個客戶端中還包括第三客戶端,讀鎖請求隊列隊首的內存地址存儲第三客戶端的標識;

      則第一讀鎖請求攜帶讀鎖請求隊列的第一內存地址為從讀鎖請求隊列隊首到隊尾的順序中,可寫入第一客戶端的標識的內存地址。鎖服務器內存中的讀鎖請求隊列可記錄多個客戶端,因此,鎖服務器可以確認多個客戶端的讀鎖狀態(tài),即是處于讀鎖請求狀態(tài)或獲得讀鎖??蛇x的,第一內存地址為從讀鎖請求隊列隊首到隊尾的順序中,第一個可寫入第一客戶端的標識的內存地址。

      結合第三方面,在第五種可能的實現方式中,第一讀鎖請求還攜帶鎖租約;所鎖租約用于表明讀鎖的有效期,在鎖租約到期,鎖服務器可及時釋放讀鎖。

      結合第三方面第二種可能的實現方式,在第六種可能的實現方式中,接口卡接收第一客戶端發(fā)送的讀鎖釋放請求;讀鎖請釋放求攜帶讀鎖請求隊列中存儲第一客戶端的標識的第一內存地址;

      接口卡根據為第一客戶端分配的讀鎖數量減少內存中的讀鎖分配計數;

      接口卡將讀鎖請求隊列中第一內存地址中的第一客戶端的標識刪除。第一客戶端釋放讀鎖,從而鎖服務器可以分配寫鎖??蛇x的,第一客戶端根據其他申請寫鎖的客戶端的通知發(fā)送讀鎖釋放請求。

      結合第三方面的第二種可能的實現方式中,在第七種可能的實現方式中,當第一客戶端獲得讀鎖后發(fā)生故障,

      接口卡根據為第一客戶端分配的讀鎖數量減少內存中的讀鎖分配計數;接口卡將讀鎖請求隊列中第一內存地址中的第一客戶端的標識刪除。當第一客戶端獲得讀鎖后發(fā)生故障,鎖服務器接口卡將第一客戶端的讀鎖釋放,防止故障客戶端長期持有讀鎖??蛇x的,接口卡可以根據其他客戶端的通知確定第一客戶端故障后,釋放第一客戶端持有的讀鎖。

      第四方面,本發(fā)明實施例提供了另一種集群中鎖管理方法,集群包含多個客戶端和鎖服務器,鎖服務器包含接口卡和內存,內存中存儲有讀鎖請求隊列和寫鎖分配標識;其中,讀鎖請求隊列用于記錄集群中針對同一共享資源處于讀鎖等待狀態(tài)或獲得讀鎖的客戶端的標識,寫鎖分配標識用于表示是否分配針對共享資源的寫鎖;鎖管理方法包括:多個客戶端中的第一客戶端向接口卡發(fā)送第一讀鎖請求;第一讀鎖請求攜帶第一客戶端的標識和讀鎖請求隊列的第一內存地址;第一客戶端接收接口卡發(fā)送的第一消息,第一消息攜帶寫鎖分配標識。

      結合第四方面,在第一種可能的實現方式中,當寫鎖分配標識表明已經分配了寫鎖,則第一消息表明第一客戶端處于讀鎖等待狀態(tài)。

      結合第四方面,在第二種可能的實現方式中,當所述寫鎖分配標識表明沒有分配寫鎖,則所述第一消息表明所述第一客戶端獲得讀鎖。

      結合第四方面,在第三種可能的實現方式中,集群還包括第二客戶端,讀鎖請求隊列隊首的內存地址存儲第二客戶端的標識;

      則第一讀鎖請求攜帶讀鎖請求隊列的第一內存地址為從讀鎖請求隊列隊首到隊尾的順序中,可寫入第一客戶端的標識的內存地址??蛇x的,第一內存地址為從讀鎖請求隊列隊首到隊尾的順序中,第一個可寫入第一客戶端的標識的內存地址。

      結合第四方面,在第四種可能的實現方式中,第一讀鎖請求還攜帶鎖租約;鎖租約用于表明讀鎖的有效期。

      結合第四方面第二種可能的實現方式,在第五種可能的實現方式中,當第一客戶端獲得讀鎖,第一客戶端向接口卡發(fā)送讀鎖釋放請求;讀鎖釋放請求攜帶讀鎖請求隊列中存儲第一客戶端的標識的內存地址??蛇x的,第一客戶端接收其他申請寫鎖的客戶端發(fā)送的通知進行讀鎖釋放操作。

      第五方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列和寫鎖分配標識,寫鎖請求隊列隊首的內存地址存儲第一客戶端的標識,寫鎖請求隊列還存儲第二客戶端的標識,寫鎖分配標識表明已經分配寫鎖,第一客戶端獲得共享資源的寫鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);鎖管理方法包括:接口卡接收第一客戶端的寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址;接口卡根據寫鎖請求隊列隊首的內存地址刪除寫鎖請求隊列中第一客戶端的標識;接口卡接收第一客戶端發(fā)送的寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列存儲第二客戶端的標識的內存地址;接口卡向第一客戶端發(fā)送寫鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識;接口卡接收第一客戶端發(fā)送的寫鎖占用請求,寫鎖占用請求攜帶第二客戶端的標識和寫鎖請求隊列隊首的內存地址;接口卡將第二客戶端的標識寫入寫鎖請求隊列隊首的內存地址。本發(fā)明實施例中,第一客戶端在釋放寫鎖的同時,直接為寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的一個客戶端分配寫鎖。

      結合第五方面,在第一種可能的實現方式中,寫鎖請求隊列存儲第二客戶端的標識的內存地址為從寫鎖請求隊列隊首開始的下一個內存地址。因此,從寫鎖請求隊列隊首開始的下一個內存地址存儲的客戶端優(yōu)先獲得寫鎖。

      結合第五方面,在第二種可能的實現方式中,寫鎖請求隊列還存儲第二客戶端的寫鎖優(yōu)先級,其中,第二客戶端的寫鎖優(yōu)先級在寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端中最高。因此,寫鎖請求隊列記錄的處于寫鎖等待狀態(tài)的客戶端中寫鎖優(yōu)先級最高的客戶端優(yōu)先獲得寫鎖。

      第六方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,寫鎖請求隊列隊首的內存地址存儲第一客戶端的標識,讀鎖請求隊列存儲第二客戶端的標識,寫鎖分配標識表明已經分配寫鎖,讀鎖分配計數為0,第一客戶端獲得共享資源的寫鎖,第二客戶端針對該共享資源處于讀鎖等待狀態(tài);鎖管理方法包括:接口卡接收第一客戶端發(fā)送的寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址;接口卡將寫鎖分配標識置為未分配寫鎖狀態(tài);接口卡根據寫鎖請求隊列隊首的內存地址刪除寫鎖請求隊列中第一客戶端的標識;接口卡接收第一客戶端發(fā)送的讀鎖請求查詢消息;接口卡向第一客戶端發(fā)送讀鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識;接口卡接收第一客戶端發(fā)送的讀鎖分配計數修改請求;接口卡根據讀鎖分配計數修改請求增加內存中的讀鎖分配計數。在釋放第一客戶端寫鎖的同時,直接為讀鎖請求隊列中記錄的處于讀鎖等待狀態(tài)的客戶端分配讀鎖。

      第七方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列和寫鎖分配標識,寫鎖請求隊列隊首的內存地址存儲第一客戶端的標識,寫鎖請求隊列還存儲第二客戶端的標識,寫鎖分配標識表明已經分配寫鎖,第一客戶端獲得共享資源的寫鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);鎖管理方法包括:第一客戶端向接口卡發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址;當接口卡根據寫鎖請求隊列隊首的內存地址刪除寫鎖請求隊列中第一客戶端的標識,第一客戶端向接口卡發(fā)送寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列存儲第二客戶端的標識的內存地址;第一客戶端接收接口卡發(fā)送的寫鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識;第一客戶端向接口卡發(fā)送寫鎖占用請求,寫鎖占用請求攜帶第二客戶端的標識和寫鎖請求隊列隊首的內存地址;第一客戶端接收接口卡發(fā)送的寫鎖占用請求響應,表明將第二客戶端的標識寫入寫鎖請求隊列隊首的內存地址;第一客戶端向第二客戶端發(fā)送通知,通知表明第二客戶端獲得寫鎖。第一客戶端在釋放寫鎖的同時,直接為寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的一個客戶端分配寫鎖。

      結合第七方面,在第一種可能的實現方式中,寫鎖請求隊列存儲第二客戶端的標識的內存地址為從寫鎖請求隊列隊首開始的下一個內存地址。因此,從寫鎖請求隊列隊首開始的下一個內存地址存儲的客戶端優(yōu)先獲得寫鎖。

      結合第七方面,在第二種可能的實現方式中,寫鎖請求隊列還存儲第二客戶端的寫鎖優(yōu)先級,其中,第二客戶端的寫鎖優(yōu)先級在寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端中最高。因此,寫鎖請求隊列記錄的處于寫鎖等待狀態(tài)的客戶端中寫鎖優(yōu)先級最高的客戶端優(yōu)先獲得寫鎖。

      第八方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,寫鎖請求隊列隊首的內存地址存儲第一客戶端的標識,讀鎖請求隊列存儲第二客戶端的標識,寫鎖分配標識表明已經分配寫鎖,讀鎖分配計數為0,第一客戶端獲得共享資源的寫鎖,第二客戶端針對該共享資源處于讀鎖等待狀態(tài);鎖管理方法包括:第一客戶端向接口卡發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址;當接口卡將寫鎖分配標識置為未分配寫鎖狀態(tài)并根據寫鎖請求隊列隊首的內存地址刪除寫鎖請求隊列中第一客戶端的標識時,第一客戶端向接口卡發(fā)送讀鎖請求查詢消息;第一客戶端接收接口卡發(fā)送的讀鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識;第一客戶端向接口卡發(fā)送讀鎖分配計數修改請求。第一客戶端在釋放寫鎖的同時,直接為讀鎖請求隊列中記錄的處于讀鎖等待狀態(tài)的客戶端分配讀鎖。

      第九方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列和寫鎖分配標識,寫鎖請求隊列隊首的內存地址存儲第一客戶端的標識,寫鎖請求隊列還存儲第二客戶端的標識,寫鎖分配標識表明已經分配寫鎖,第一客戶端獲得共享資源的寫鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);鎖管理方法包括:第一客戶端向接口卡發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址;當接口卡將寫鎖分配標識置為未分配寫鎖狀態(tài)并根據寫鎖請求隊列隊首的內存地址刪除寫鎖請求隊列中第一客戶端的標識時,第一客戶端向接口卡發(fā)送寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列存儲第二客戶端的標識的內存地址;第一客戶端接收接口卡發(fā)送的寫鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識;第一客戶端根據第二客戶端的標識向第二客戶端發(fā)送通知,通知用于指示第二客戶端向接口卡發(fā)送寫鎖請求。第一客戶端釋放寫鎖的同時,通知處于寫鎖等待狀態(tài)的客戶端發(fā)送寫鎖請求。

      結合第九方面,在第一種可能的實現方式中,寫鎖請求隊列存儲第二客戶端的標識的內存地址為從寫鎖請求隊列隊首開始的下一個內存地址。從寫鎖請求隊列隊首開始的下一個內存地址存儲的客戶端優(yōu)先獲得第一客戶端發(fā)送的寫鎖請求通知。

      結合第九方面,在第二種可能的實現方式中,寫鎖請求隊列還存儲第二客戶端的寫鎖優(yōu)先級,其中,第二客戶端的寫鎖優(yōu)先級在寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端中最高。因此,寫鎖請求隊列記錄的處于寫鎖等待狀態(tài)的客戶端中寫鎖優(yōu)先級最高的客戶端優(yōu)先獲得第一客戶端發(fā)送的寫鎖請求通知。

      第十方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,寫鎖請求隊列隊首的內存地址存儲第一客戶端的標識,讀鎖請求隊列存儲第二客戶端的標識,寫鎖分配標識表明已經分配寫鎖,讀鎖分配計數為0,第一客戶端獲得共享資源的寫鎖,第二客戶端針對該共享資源處于讀鎖等待狀態(tài);鎖管理方法包括:第一客戶端向接口卡發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址;當接口卡將寫鎖分配標識置為未分配寫鎖狀態(tài)并根據寫鎖請求隊列隊首的內存地址刪除寫鎖請求隊列中第一客戶端的標識時,第一客戶端向接口卡發(fā)送讀鎖請求查詢消息;第一客戶端接收接口卡發(fā)送的讀鎖請求查詢響應消息,讀鎖請求查詢響應消息攜帶第二客戶端的標識,第一客戶端根據第二客戶端的標識向第二客戶端發(fā)送通知,通知用于指示第二客戶端申請讀鎖。第一客戶端釋放寫鎖的同時,通知處于讀鎖等待狀態(tài)的第二客戶端申請讀鎖,第二客戶端向接口卡發(fā)送讀鎖分配計數修改請求,接口卡修改讀鎖分配計數,第二客戶端獲得讀鎖。

      第十一方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,讀鎖請求隊列存儲第一客戶端的標識,寫鎖請求隊列隊首的內存地址存儲第二客戶端的標識,寫鎖分配標識表明未分配寫鎖,讀鎖分配計數為第一客戶端獲得的讀鎖數量,第一客戶端獲得共享資源的讀鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);鎖管理方法包括:第一客戶端向接口卡發(fā)送讀鎖釋放請求,讀鎖釋放請求攜帶讀鎖請求隊列存儲第一客戶端的標識的內存地址;當接口卡將讀鎖分配計數減為0并根據讀鎖請求隊列存儲第一客戶端的標識的內存地址刪除讀鎖請求隊列中第一客戶端的標識時,第一客戶端向接口卡發(fā)送寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列隊首的內存地址;第一客戶端接收接口卡發(fā)送的寫鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識;第一客戶端根據第二客戶端的標識向第二客戶端發(fā)送通知,通知用于指示第二客戶端申請寫鎖。第一客戶端釋放讀鎖的同時,通知寫鎖請求隊列隊首記錄的處于寫鎖等待狀態(tài)的第二客戶端申請寫鎖,第二客戶端根據通知向接口卡發(fā)送寫鎖分配標識修改請求,接口卡將寫鎖分配標識置為已經分配寫鎖狀態(tài),第二客戶端獲得寫鎖。

      第十二方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,讀鎖請求隊列存儲第一客戶端的標識,寫鎖請求隊列隊首的內存地址存儲第二客戶端的標識,寫鎖分配標識表明未分配寫鎖,讀鎖分配計數為第一客戶端獲得的讀鎖數量,第一客戶端獲得共享資源的讀鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);鎖管理方法包括:第一客戶端向接口卡發(fā)送讀鎖釋放請求,讀鎖釋放請求攜帶讀鎖請求隊列存儲第一客戶端的標識的內存地址;當接口卡將內存中的讀鎖分配計數減為0并根據讀鎖請求隊列存儲第一客戶端的標識的內存地址刪除讀鎖請求隊列中第一客戶端的標識時,第一客戶端向接口卡發(fā)送寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列隊首的內存地址;第一客戶端接收接口卡發(fā)送的寫鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識;第一客戶端向接口卡發(fā)送寫鎖分配標識修改請求;當接口卡根據寫鎖分配標識修改請求將寫鎖分配標識置為已經分配寫鎖狀態(tài),第一客戶端根據第二客戶端的標識向第二客戶端發(fā)送通知,通知表明第二客戶端獲得寫鎖。第一客戶端在釋放讀鎖的同時,直接為寫鎖請求隊列隊首記錄的處于寫鎖等待狀態(tài)的第二客戶端分配寫鎖。

      第十三方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,讀鎖請求隊列存儲第一客戶端的標識,寫鎖請求隊列隊首的內存地址存儲第二客戶端的標識,寫鎖分配標識表明未分配寫鎖,讀鎖分配計數為第一客戶端獲得的讀鎖數量,第一客戶端獲得共享資源的讀鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);鎖管理方法包括:接口卡接收第一客戶端發(fā)送的讀鎖釋放請求,讀鎖釋放請求攜帶讀鎖請求隊列存儲第一客戶端的標識的內存地址;接口卡將讀鎖分配計數減為0并根據讀鎖請求隊列存儲第一客戶端的標識的內存地址刪除讀鎖請求隊列中第一客戶端的標識;接口卡接收第一客戶端發(fā)送的寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列隊首的內存地址;接口卡向第一客戶端發(fā)送寫鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識。在釋放第一客戶端的讀鎖的同時,接口卡查詢寫鎖請求隊列隊首記錄的處于寫鎖等待狀態(tài)的第二客戶端,以優(yōu)先處理寫鎖。

      第十四方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,讀鎖請求隊列存儲第一客戶端的標識,寫鎖請求隊列隊首的內存地址存儲第二客戶端的標識,寫鎖分配標識表明未分配寫鎖,讀鎖分配計數為第一客戶端獲得的讀鎖數量,第一客戶端獲得共享資源的讀鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);鎖管理方法包括:接口卡接收第一客戶端發(fā)送的讀鎖釋放請求,讀鎖釋放請求攜帶讀鎖請求隊列存儲第一客戶端的標識的內存地址;接口卡將讀鎖分配計數減為0并根據讀鎖請求隊列存儲第一客戶端的標識的內存地址刪除讀鎖請求隊列中第一客戶端的標識;接口卡接收第一客戶端發(fā)送的寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列隊首的內存地址;接口卡向第一客戶端發(fā)送寫鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識,接口卡接收第一客戶端發(fā)送的寫鎖分配標識修改請求;接口卡根據寫鎖分配標識修改請求將寫鎖分配標識置為已經分配寫鎖狀態(tài)。在釋放第一客戶端的讀鎖的同時,為寫鎖請求隊列隊首記錄的處于寫鎖等待狀態(tài)的客戶端分配寫鎖。

      第十五方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列和寫鎖分配標識,寫鎖請求隊列隊首的內存地址存儲第一客戶端的標識,寫鎖請求隊列隊首開始的下一個內存地址還存儲第二客戶端的標識,寫鎖分配標識表明已經分配寫鎖,第一客戶端獲得共享資源的寫鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);鎖管理方法包括:接口卡接收第一客戶端的寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址;接口卡根據寫鎖請求隊列隊首的內存地址刪除寫鎖請求隊列中第一客戶端的標識;接口卡查詢寫鎖請求隊列隊首開始的下一個內存地址存儲的第二客戶端的標識,接口卡將第二客戶端的標識寫入寫鎖請求隊列隊首的內存地址,接口卡向第二客戶端發(fā)送通知,通知第二客戶端獲得寫鎖。本發(fā)明實施例中,第一客戶端在釋放寫鎖的同時,鎖服務器為寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的一個客戶端分配寫鎖。

      第十六方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,寫鎖請求隊列隊首的內存地址存儲第一客戶端的標識,讀鎖請求隊列存儲第二客戶端的標識,寫鎖分配標識表明已經分配寫鎖,讀鎖分配計數為0,第一客戶端獲得共享資源的寫鎖,第二客戶端針對該共享資源處于讀鎖等待狀態(tài);鎖管理方法包括:接口卡接收第一客戶端發(fā)送的寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址;接口卡將寫鎖分配標識置為未分配寫鎖狀態(tài);接口卡根據寫鎖請求隊列隊首的內存地址刪除寫鎖請求隊列中第一客戶端的標識;接口卡查詢讀鎖請求隊列確定讀鎖請求隊列存儲的第二客戶端的標識,接口卡增加內存中的讀鎖分配計數,接口卡向第二客戶端發(fā)送通知表明第二客戶端獲得讀鎖。在釋放第一客戶端寫鎖的同時,鎖服務器直接為讀鎖請求隊列中記錄的處于讀鎖等待狀態(tài)的客戶端分配讀鎖。

      第十七方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,讀鎖請求隊列存儲第一客戶端的標識,寫鎖請求隊列隊首的內存地址存儲第二客戶端的標識,寫鎖分配標識表明未分配寫鎖,讀鎖分配計數為第一客戶端獲得的讀鎖數量,第一客戶端獲得共享資源的讀鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);鎖管理方法包括:接口卡接收第一客戶端發(fā)送的讀鎖釋放請求,讀鎖釋放請求攜帶讀鎖請求隊列存儲第一客戶端的標識的內存地址;接口卡將讀鎖分配計數減為0并根據讀鎖請求隊列存儲第一客戶端的標識的內存地址刪除讀鎖請求隊列中第一客戶端的標識;接口卡查詢寫鎖請求隊列隊首的內存地址確定第二客戶端的標識;接口卡根據第二客戶端的標識向第二客戶端發(fā)送通知,通知第二客戶端向接口卡申請寫鎖。在釋放第一客戶端的讀鎖的同時,接口卡查詢寫鎖請求隊列隊首記錄的處于寫鎖等待狀態(tài)的第二客戶端,以優(yōu)先處理寫鎖。

      第十八方面,本發(fā)明實施例提供了另外一種集群中鎖管理的方法,集群包括鎖服務器、第一客戶端和第二客戶端,其中,鎖服務器包括接口卡和內存,內存中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,讀鎖請求隊列存儲第一客戶端的標識,寫鎖請求隊列隊首的內存地址存儲第二客戶端的標識,寫鎖分配標識表明未分配寫鎖,讀鎖分配計數為第一客戶端獲得的讀鎖數量,第一客戶端獲得共享資源的讀鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);鎖管理方法包括:接口卡接收第一客戶端發(fā)送的讀鎖釋放請求,讀鎖釋放請求攜帶讀鎖請求隊列存儲第一客戶端的標識的內存地址;接口卡將讀鎖分配計數減為0并根據讀鎖請求隊列存儲第一客戶端的標識的內存地址刪除讀鎖請求隊列中第一客戶端的標識;接口卡查詢寫鎖請求隊列隊首的內存地址確定第二客戶端的標識;接口卡將寫鎖分配標識置為已經分配寫鎖狀態(tài),接口卡根據第二客戶端的標識向第二客戶端發(fā)送通知,表明第二客戶端獲得寫鎖。在釋放第一客戶端的讀鎖的同時,為寫鎖請求隊列隊首記錄的處于寫鎖等待狀態(tài)的客戶端分配寫鎖。

      根據上述各實施例,本發(fā)明實施例還提供了鎖服務器,鎖服務器包括內存和接口卡,用于實現上述各實施例中鎖服務器的功能。

      根據上述各實施例,本發(fā)明實施例還提供了客戶端,用于作為上述各實施例中描述的集群中的第一客戶端,以實現本發(fā)明上述各實施例對應的方案??蛻舳税▽崿F本發(fā)明上述各實施例中集群中第一客戶端的功能的結構單元,或實現本發(fā)明上述各實施例中集群中第一客戶端的功能。相應地,本發(fā)明實施例還提供了非易失性計算機可讀存儲介質和計算機程序產品,當客戶端的內存加載非易失性計算機可讀存儲介質和計算機程序產品中包含的計算機指令,客戶端的中央處理單元(centerprocessingunit,cpu)執(zhí)行該計算機指令時,使客戶端實現本發(fā)明上述各實施例中集群中第一客戶端的功能。

      結合上述各實施例,本發(fā)明實施例還提供了一種集群,集群中包括鎖服務器和客戶端,其中鎖服務器和客戶端可參考上述各實施例的描述。

      本發(fā)明各實施例提供的集群中一種集群中鎖管理的方法、鎖服務器及客戶端,鎖服務器與客戶端之間處理讀鎖請求、寫鎖請求、寫鎖釋放請求、讀鎖釋放請求等操作,直接由鎖服務器的接口卡與內存通信,不需要鎖服務器的中央處理單元處理上述操作,因此,相對于使用(transmissioncontrolprotocol/internetprotocol,tcp/ip)協議通信,減少了客戶端與鎖服務器之間的交互。

      附圖說明

      圖1為現有技術集群結構圖;

      圖2為本發(fā)明實施例集群結構圖;

      圖3為本發(fā)明實施例鎖服務器結構圖;

      圖4為本發(fā)明實施例鎖服務器內存示意圖;

      圖5為本發(fā)明實施例請求寫鎖流程圖;

      圖6為本發(fā)明實施例鎖服務器內存示意圖;

      圖7為本發(fā)明實施例鎖服務器內存示意圖;

      圖8為本發(fā)明實施例請求讀鎖流程圖;

      圖9為本發(fā)明實施例鎖服務器內存示意圖;

      圖10為為本發(fā)明實施例鎖服務器內存示意圖;

      圖11為本發(fā)明實施例客戶端結構示意圖。

      具體實施例

      如圖2所示,本發(fā)明實施例中的集群包括鎖服務器、客戶端a和客戶端b,客戶端a和客戶端b分別與鎖服務器使用rdma協議通信,其中鎖服務器內存中存儲鎖請求隊列、讀鎖分配計數和寫鎖分配標識,具體請見下面描述。

      如圖3所示,鎖服務器包括內存301和接口卡302,其中,接口卡302可以為支持以太協議(ethenet)網絡接口卡(networkinterfacecard,nic),或者基于infiniband協議的接口卡或者其他可實現rdma等可實現遠程直接訪問內存的協議的接口卡。本發(fā)明實施例中的內存301可以是動態(tài)隨機存取存儲器(dynamicrandomaccessmemory,dram)、雙列直接式存儲模塊(dual-inline-memory-modules,dimm)、半導體存儲器(semiconductormemory,scm)或者非易失性存儲器(non-volatilememory,nvm)等,也可以是上述的組合,本發(fā)明實施例對此不作限定??蛻舳丝梢詾榉掌鳌€人計算機以及其他終端,客戶端通常包括cpu和內存,客戶端通常還包括接口卡,用于與鎖服務器通信,cpu、內存和接口卡之間通過總線通信。根據圖2所示的集群中,如圖4所示,本發(fā)明實施例中,鎖服務器內存301中的鎖請求隊列為寫鎖請求隊列;另一種實現,鎖服務器的內存301中的鎖請求隊列為讀鎖請求隊列;另一種實現,鎖服務器的內存301中的鎖請求隊列為寫鎖請求隊列和讀鎖請求隊列。

      本發(fā)明實施例中,寫鎖請求隊列和讀鎖請求隊列是內存301中的數據結構,其中,寫鎖請求隊列用于存儲處于寫鎖等待狀態(tài)或獲得寫鎖的客戶端的標識;讀鎖請求隊列用于存儲處于讀鎖等待狀態(tài)或獲得讀鎖的客戶端的標識。本發(fā)明實施例中,描述的寫鎖請求隊列和讀鎖請求隊列存儲請求同一共享資源的客戶端的標識,請求同一共享資源是指針對同一共享資源申請寫鎖或讀鎖。即寫鎖請求隊列用于記錄集群中針對同一共享資源處于寫鎖等待狀態(tài)和獲得寫鎖的客戶端的標識,讀鎖請求隊列用于記錄集群中針對同一共享資源處于讀鎖等待狀態(tài)或獲得讀鎖的客戶端的標識,寫鎖分配標識用于標識是否分配針對同一共享資源的寫鎖,讀鎖分配計數用于標識針對同一共享資源分配讀鎖的數量相應的。內存301的讀鎖分配計數具體實現,可以分配一個內存地址,記錄鎖服務器分配的讀鎖的數量或者用多個內存地址,每一個內存地址記錄一個讀鎖請求隊列中記錄的一個客戶端獲得讀鎖的數量。本發(fā)明實施例具體實現中,寫鎖請求隊列是內存301中的數據結構讀鎖請求隊列是內存301中的數據結構,具體實現時,可以為數組或其他結構。

      本發(fā)明實施例中,寫鎖請求隊列的內存地址存儲客戶端的標識與寫鎖請求隊列記錄客戶端的標識具有相同的含義。同理,讀鎖請求隊列的內存地址存儲客戶端的標識與讀鎖請求隊列記錄客戶端的標識具有相同的含義。寫鎖分配標識用于標識是否分配針對同一共享資源的寫鎖與寫鎖分配標識用于表明是否分配寫鎖具有相同的含義。本發(fā)明實施例中集群包含多個客戶端,多個客戶端中的客戶端與多個客戶端中包含的客戶端具有相同的含義,例如,多個客戶端中的第二客戶端與多個客戶端包含第二客戶端。

      具體實現中,鎖服務器通過接口卡301與各客戶端通信,將寫鎖請求隊列隊首內存地址及寫鎖請求隊列的長度信息發(fā)送給各客戶端,同理將讀鎖請求隊列隊首內存地址及讀鎖請求隊列長度信息發(fā)送給各客戶端。將寫鎖分配標識的內存地址信息以及讀鎖分配計數的內存地址信息發(fā)送給各客戶端。

      客戶端a和客戶端b使用rdma協議與鎖服務器通信??蛻舳伺c鎖服務器之間使用radm協議通信,相對于使用tcp/ip協議通信,減少了客戶端與鎖服務器之間的交互。

      如圖5所示,本發(fā)明實施例提供了客戶端請求寫鎖流程。

      步驟501:接口卡302接收客戶端a的寫鎖請求。

      客戶端a向鎖服務器發(fā)送寫鎖請求;寫鎖請求中攜帶客戶端a的標識以及寫鎖請求隊列隊首的內存地址。

      內存301中的寫鎖請求隊列,可以用于記錄所有處于寫鎖等待狀態(tài)和獲得寫鎖的客戶端的標識,則鎖服務器根據寫鎖請求隊列可確定集群中客戶端申請寫鎖的狀態(tài)。

      步驟502:接口卡302將客戶端a的標識寫入寫鎖請求隊列隊首的內存地址。

      鎖服務器的接口卡302接收寫鎖請求,根據寫鎖請求攜帶的寫鎖請求隊列隊首的內存地址,將客戶端a的標識寫入寫鎖請求隊列隊首,如圖6所示。

      如果成功將客戶端a的標識寫入寫鎖請求隊列的隊首,則表明鎖服務器沒有向集群中的客戶端分配寫鎖,也沒有處于寫鎖等待的客戶端??蛇x的,接口卡302向客戶端a返回消息,表明將客戶端a的標識寫入寫鎖請求隊列隊首的內存地址。

      可選的,接口卡302將客戶端a的標識寫入寫鎖請求隊列隊首失敗,接口卡302向客戶端a發(fā)送消息,表明將客戶端a的標識寫入寫鎖請求隊列隊首失敗,這種情況下,客戶端a可再次向接口卡302發(fā)送寫鎖請求,寫鎖請求攜帶客戶端a的標識和寫鎖請求隊列隊首內存地址開始的下一個內存地址,接口卡302將客戶端a的標識寫入寫鎖請求隊列的下一個內存地址。當客戶端a的標識寫入寫鎖請求隊列的下一個內存地址失敗,則客戶端a依次選擇寫請求隊列隊首開始的第3個內存地址,重復上述操作,客戶端a再次向接口卡302發(fā)送寫鎖請求隊列,寫鎖請求攜帶客戶端a的標識和寫鎖請求隊列的第3個內存地址,直到成功寫入寫鎖請求隊列的內存地址中為止,即寫鎖請求中攜帶了可寫入客戶端a的標識的寫鎖請求隊列的內存地址??蛻舳薬發(fā)送寫鎖請求可以間隔固定周期發(fā)送,也可以接收到消息表明寫入寫鎖請求隊列失敗即發(fā)送。

      可選的,接口卡302將客戶端a的標識寫入寫鎖請求隊列隊首失敗,接口卡302則從寫鎖請求隊列隊首開始,在寫鎖請求隊列中依次查詢可寫入的內存地址,將客戶端a的標識寫入寫鎖請求隊列,接口卡302向客戶端a發(fā)送消息表明將客戶端a的標識寫入寫鎖請求隊列的內存地址??蛇x的,消息中可攜帶寫入寫鎖請求隊列中存儲客戶端a的標識的內存地址。

      步驟503:查詢是否已經分配讀鎖。

      本發(fā)明實施例以寫鎖分配標識為0表示鎖服務器沒有分配寫鎖,寫鎖分配標識為1表示鎖服務器分配寫鎖為例。

      可選的,如果接口卡302成功將客戶端a的標識寫入寫鎖請求隊列的隊首,接口卡302查詢讀鎖分配計數確定是否已經分配讀鎖。當鎖服務器沒有分配讀鎖時,根據寫鎖分配標識的內存地址將寫鎖分配標識置為已經分配寫鎖狀態(tài)(本發(fā)明實施例中置為1),接口卡302向客戶端a發(fā)送消息,表明客戶端a獲得寫鎖。示例地,該消息中可攜帶寫鎖分配標識和讀鎖分配計數,其中,寫鎖分配標識為1,讀鎖分配計數為0。讀鎖分配計數為0表明沒有分配讀鎖。

      可選的,如果接口卡302成功將客戶端a的標識寫入寫鎖請求隊列的隊首,接口卡302向客戶端a發(fā)送消息表明將將客戶端a的標識寫入寫鎖請求隊列的隊首,客戶端a向接口卡302發(fā)送寫鎖分配標識修改請求,寫鎖分配標識修改請求攜帶寫鎖分配標識的內存地址,接口卡302查詢讀鎖分配計數,確定鎖服務器是否已經分配讀鎖,當鎖服務器沒有分配讀鎖時,根據寫鎖分配標識的內存地址將寫鎖分配標識置為已經分配寫鎖狀態(tài)(本發(fā)明實施例中置為1),接口卡302向客戶端a發(fā)送消息,表明客戶端a獲得寫鎖。具體地,該消息中可攜帶寫鎖分配標識和讀鎖分配計數,其中,寫鎖分配標識為1,讀鎖分配計數為0。

      接口卡302查詢讀鎖分配計數確定鎖服務器沒有分配讀鎖,則接口卡302將寫鎖分配標識置為寫鎖分配狀態(tài),即將寫鎖分配標識置為1,表示客戶端a成功獲得寫鎖。即將寫鎖成功分配給客戶端a。接口卡302查詢讀鎖分配計數確定鎖服務器已經分配讀鎖,則接口卡302不將寫鎖分配標識置為1,即寫鎖分配標識仍為未分配寫鎖狀態(tài)(本發(fā)明實施例中,此時寫鎖分配標識為0),客戶端a處于寫鎖等待狀態(tài),接口卡302向客戶端a發(fā)送消息表明客戶端a處于寫鎖等待狀態(tài)。示例地,該消息中可攜帶寫鎖分配標識和讀鎖分配計數,其中,寫鎖分配標識為0,讀鎖分配計數為不為0。讀鎖分配計數不為0表明已經分配讀鎖。

      本發(fā)明實施例中,接口卡302查詢讀鎖分配計數確定鎖服務器沒有分配讀鎖(讀鎖分配計數為0),接口卡302將寫鎖分配標識置為1。

      在集群中,當鎖服務器已經分配了讀鎖,即客戶端a要修改的共享資源此時正在被集群中另一個客戶端讀取,則不能夠為客戶端a分配寫權限,即不能夠分配寫鎖。因此,在客戶端a的標識寫入寫鎖請求隊列隊首時,需要確定鎖服務器是否分配讀鎖。當接口卡302查詢到鎖服務器沒有分配讀鎖,則處于寫鎖請求隊列隊首的客戶端獲得寫鎖,也即客戶端a獲得寫鎖。當接口卡302查詢到鎖服務器已經分配讀鎖,則客戶端a處于寫鎖等待。

      當接口卡302根據客戶端a發(fā)送的寫鎖請求攜帶的寫鎖請求隊列隊首的內存地址,將客戶端a的標識寫入寫鎖請求隊列隊首失敗,則從寫鎖請求隊列隊首開始,在寫鎖請求隊列中依次查詢可寫入的內存地址,將客戶端a的標識寫入寫鎖請求隊列。因為寫鎖請求隊列隊首記錄第一個申請寫鎖請求的客戶端,并且一個寫鎖只能夠分配給一個客戶端。因此,當寫鎖請求隊列隊首的客戶端已經獲得寫鎖或處于寫鎖等待,則將客戶端a的標識寫入寫鎖請求隊列隊首失敗。

      本發(fā)明實施例以將客戶端a的標識成功寫入寫鎖請求隊列隊首,并且內存301中的讀鎖分配計數記錄沒有分配讀鎖為例,即客戶端a獲得寫鎖。在此基礎上,在另一個實施例中,鎖服務器接口卡302接收客戶端b發(fā)送的寫鎖請求,客戶端b發(fā)送的寫鎖請求攜帶客戶端b的標識以及寫鎖請求隊列隊首的內存地址。由于寫鎖請求隊列的隊首已經寫入客戶端a的標識,接口卡302將客戶端b的標識寫入寫鎖請求隊列隊首失敗??蛇x的,接口卡302向客戶端b發(fā)送消息表明將客戶端b的標識寫入寫鎖請求隊列隊首失敗。接口卡302將客戶端b的標識寫入寫鎖請求隊列從隊首開始的下一個內存地址,即從寫鎖請求隊列隊首開始,客戶端b的寫鎖請求處于寫請求隊列的第2位,如圖7所示。具體將客戶端b的標識寫入寫鎖請求隊列隊首開始的下一個內存地址的方式請參見前面將客戶端a的標識寫入寫鎖請求隊列中的描述,在此不再贅述??蛇x的,接口卡301查詢寫鎖請求隊列中從寫鎖請求隊列隊首到隊尾的順序中可寫入客戶端的標識的內存地址,向客戶端b發(fā)送通知,通知客戶端b該可寫入客戶端的標識的內存地址??蛇x的,該可寫入客戶端的標識的內存地址可以為從寫鎖請求隊列隊首到隊尾的順序中第一個可寫入客戶端的標識的內存地址。

      此時內存301中寫鎖分配標識置為分配寫鎖狀態(tài)(本發(fā)明實施例中置為1),即分配給寫鎖請求隊列隊首的客戶端a,客戶端b處于寫鎖等待狀態(tài),接口卡302不再修改內存301中寫鎖分配標識??蛇x的,接口卡302向客戶端b發(fā)送消息表明客戶端b處于寫鎖等待狀態(tài)。具體地,該消息中可攜帶寫鎖請求隊列中存儲客戶端b的標識的內存地址??蛻舳薭根據該內存地址確定處于寫鎖等待狀態(tài)。因此,寫鎖服務器確定此時集群中客戶端寫鎖請求狀態(tài),即將寫鎖分配給客戶端a,客戶端b處于寫鎖等待狀態(tài)。將寫鎖分配給客戶端a也稱為客戶端a持有寫鎖,客戶端a為寫鎖的持有者??蛇x的,客戶端向鎖服務器發(fā)送寫鎖請求還可攜帶寫鎖租約,即客戶端持有寫鎖的有效時間,超出該有效時間,客戶端未更新租約,則該寫鎖自動失效。

      如圖8所示,本發(fā)明實施例還提供了客戶端請求讀鎖流程。本發(fā)明實施例中,鎖服務器還包含讀鎖請求隊列,關于本發(fā)明實施列中寫鎖請求隊列的描述請參見前面部分的描述。讀鎖請求隊列用于存儲處于讀鎖等待狀態(tài)或獲得讀鎖的客戶端的標識,因此,鎖服務器根據讀鎖請求隊列可確定集群中客戶端申請讀鎖的狀態(tài)。根據讀鎖分配計數可確定已經分配的讀鎖的數量。

      步驟801:接口卡302接收客戶端c發(fā)送的讀鎖請求。

      本發(fā)明實施例中,內存301中還包括讀鎖請求隊列,集群中還包括客戶端c。鎖服務器接口卡302接收客戶端c發(fā)送的讀鎖請求,讀鎖請求攜帶客戶端c的標識以及讀鎖請求隊列隊首的內存地址。

      步驟802:接口卡302將客戶端c的標識寫入讀鎖請求隊列。

      具體的,接口卡302將客戶端c的標識寫入讀鎖請求隊列隊首的內存地址,當讀鎖請求隊列隊首的內存地址沒有寫入集群中其他客戶端的標識時,則將客戶端c的標識成功寫入讀鎖請求隊列隊首的內存地址,如圖9所示??蛇x的,接口卡302向客戶端a發(fā)送消息表明將客戶端c的標識寫入讀鎖請求隊列隊首的內存地址。

      當讀鎖請求隊列隊首的內存地址寫入集群中其他客戶端的標識時,則將客戶端c的標識寫入讀鎖請求隊列隊首的內存地址失敗,可選的,接口卡302向客戶端c發(fā)送消息,表明將客戶端c的標識寫入寫鎖請求隊列隊首失敗,這種情況下,客戶端c可再次向接口卡302發(fā)送讀鎖請求,讀鎖請求攜帶客戶端c的標識和讀鎖請求隊列隊首開始的下一個內存地址,接口卡302將客戶端c的標識寫入讀鎖請求隊列隊首開始的下一個內存地址。當客戶端c的標識寫入讀鎖請求隊列隊首開始的下一個內存地址失敗,重復上次操作,客戶端c再次向接口卡302發(fā)送讀鎖請求隊列,讀鎖請求攜帶客戶端c的標識和讀鎖請求隊列首開始的的第3個內存地址,直到成功寫入讀鎖請求隊列的內存地址中為止,即讀鎖請求中攜帶了可寫入客戶端c的標識的內存地址??蛻舳薱發(fā)送讀鎖請求可以周期發(fā)送,也可以接收到消息表明寫入讀鎖請求隊列失敗即發(fā)送。可選的,接口卡301查詢讀鎖請求隊列中從讀鎖請求隊列隊首到隊尾的順序中可寫入客戶端的標識的內存地址,向客戶端b發(fā)送通知,通知客戶端b該可寫入客戶端的標識的內存地址??蛇x的,該可寫入客戶端的標識的內存地址是從寫鎖請求隊列隊首到隊尾的順序中第一個可寫入客戶端的標識的內存地址

      可選的,接口卡302將客戶端c的標識寫入讀鎖請求隊列隊首失敗,接口卡302則從讀鎖請求隊列隊首開始,在讀鎖請求隊列中依次查詢可寫入的內存地址,將客戶端c的標識寫入讀鎖請求隊列,接口卡302向客戶端c發(fā)送消息表明將客戶端c的標識寫入讀鎖請求隊列的內存地址??蛇x的,消息中可攜帶寫入讀鎖請求隊列中存儲客戶端c的標識的內存地址。

      由于集群中共享資源可以被多個客戶端同時讀取,因此,讀鎖可以由多個客戶端共享,即可由多個客戶端同時持有讀鎖,則多個客戶端同時為讀鎖的持有者。因此讀鎖分配計數可以使用計數來表示鎖服務器是否分配讀鎖,如當讀鎖分配計數為0,則表示鎖服務器沒有分配讀鎖。鎖服務器每分配一個讀鎖,則讀鎖分配計數加1。因此,在鎖服務器沒有分配寫鎖的情況下(本發(fā)明實施例中,寫鎖分配標識為0),客戶端即可獲得讀鎖。

      步驟803:增加讀鎖分配計數。

      可選的,當接口卡302將客戶端c的標識寫入讀鎖請求隊列,接口卡302將讀鎖分配計數加1,接口卡302向客戶端c返回寫鎖分配標識和讀鎖分配計數。進一步地,當寫鎖分配標識為1時,客戶端c向接口卡302發(fā)送讀鎖分配計數修改請求,接口卡302根據讀鎖分配計數修改請求將讀鎖分配計數減1。

      可選的,當接口卡302將客戶端c的標識寫入讀鎖請求隊列,當寫鎖分配標識為1時,接口卡302向客戶端c發(fā)送消息表明客戶端c處于讀鎖等待狀態(tài)。具體的,該消息中可以攜帶寫鎖分配標識,客戶端c根據寫鎖分配標識確定處于讀鎖等待狀態(tài)。

      通過上面描述可知,接口卡302向客戶端c發(fā)送消息表明客戶端c獲得讀鎖或者處于讀鎖等待狀態(tài),都表明將客戶端c的標識寫入讀鎖請求隊列的內存地址。

      可選的,當接口卡302將客戶端c的標識寫入讀鎖請求隊列,并且寫鎖分配標識為0時,接口卡302將讀鎖分配計數加1。進一步地,接口卡302向客戶端c發(fā)送消息表明客戶端c獲得讀鎖,例如消息中攜帶寫鎖分配標識,其中寫鎖分配標識為0??蛇x的,當鎖服務器已經分配寫鎖的情況下(寫鎖分配標識為1),則讀鎖請求隊列中的客戶端處于讀鎖等待狀態(tài),不增加讀鎖分配計數。進一步的,接口卡302向客戶端c發(fā)送消息,表明客戶端c處于讀鎖等待狀態(tài),例如消息中攜帶寫鎖分配標識,其中寫鎖分配標識為1。

      本發(fā)明實施例接口卡302將客戶端c的標識成功寫入讀鎖請求隊列隊首的內存地址為例,則集群中沒有客戶端獲得讀鎖或處于讀鎖等待狀態(tài),寫鎖分配標識記錄已經分配寫鎖(寫鎖分配標識為1),則客戶端c處于讀等待狀態(tài)??蛇x的,客戶端c向鎖服務器發(fā)送讀鎖請求還可攜帶讀鎖租約,即客戶端c持有讀鎖的有效時間,超出該有效時間,客戶端c未更新租約,則該讀鎖自動失效。

      本發(fā)明實施例,集群還包括客戶端d,鎖服務器的接口卡302接收客戶端d發(fā)送的讀鎖請求。客戶端d發(fā)送的讀鎖請求攜帶客戶端d的標識和讀鎖請求隊列隊首的內存地址。由于讀鎖請求隊列隊首的內存地址已經存儲客戶端c的標識,接口卡302將客戶端d的標識寫入讀鎖請求隊列隊首開始的下一個內存地址,如圖10所示,具體方案請參考客戶端c寫入讀鎖請求隊列的描述,在此不再贅述。由于客戶端a持有寫鎖(寫鎖分配標識為1),客戶端c處于讀鎖等待狀態(tài),客戶端d也處于讀鎖等待狀態(tài)。

      本發(fā)明實施例,客戶端使用rdma協議向鎖服務器的接口卡302發(fā)送鎖請求,鎖服務器內存301記錄集群中客戶端的鎖狀態(tài)。由于鎖服務器記錄了所有鎖的狀態(tài),同時鎖服務器可以確定客戶端狀態(tài),如正常狀態(tài)或故障狀態(tài),因此,在持有鎖的客戶端發(fā)生故障,可及時釋放故障客戶端持有的鎖。可選的,鎖服務器確定客戶端狀態(tài)包括通過鎖服務器與客戶端的心跳檢測確定客戶端的狀態(tài)??蛇x的,客戶端之間通過心跳檢測確定客戶端狀態(tài),正常狀態(tài)客戶端向鎖服務器報告故障客戶端信息。鎖服務器根據故障客戶端信息,釋放故障客戶端持有的鎖??蛇x的,當故障客戶端持有寫鎖,則鎖服務器的接口卡302將內存301中寫鎖分配標識置為0,從寫鎖請求隊列隊首刪除故障客戶端的標識;當故障客戶端持有讀鎖,則鎖服務器的接口卡302將內存中301讀鎖分配計數記數減1,從讀鎖請求隊列中刪除故障客戶端的標識。可選的,其他正常客戶端也可執(zhí)行上述鎖服務器操作,釋放故障客戶端持有的鎖,例如其他正??蛻舳讼蚪涌诳?02發(fā)送鎖釋放請求,鎖釋放請求中攜帶故障客戶端的標識,接口卡302執(zhí)行上述鎖釋放操作??蛇x的,鎖服務器的接口卡302釋放故障客戶端持有的寫鎖后,接口卡302向其他客戶端發(fā)送通知,通知表明已經釋放了故障客戶端持有的寫鎖。同理,鎖服務器的接口卡302釋放故障客戶端持有的讀鎖后,接口卡302向其他客戶端發(fā)送通知,通知表明已經釋放了故障客戶端持有的讀鎖。

      本發(fā)明實施例中客戶端a持有寫鎖,還包括進行釋放寫鎖操作??蛻舳薬向接口卡302發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址??蛇x的,接口卡302從寫鎖請求隊列隊首的內存地址將客戶端a的標識刪除,接口卡302將寫鎖分配標識置為未分配寫鎖狀態(tài)(即由1置為0)??蛇x的,接口卡302從寫鎖請求隊列隊首的內存地址將客戶端a的標識刪除,接口卡302通知客戶端a將客戶端a的標識刪除,客戶端a向接口卡302發(fā)送寫鎖分配標識修改請求,接口卡302將寫鎖分配標識置為未分配寫鎖狀態(tài)(即由1置為0)。

      可選的,當客戶端a釋放寫鎖,還包括:客戶端a向接口卡302發(fā)送寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列隊首開始的下一個內存地址,接口卡302查詢寫鎖請求隊列隊首開始的下一個內存地址存儲客戶端b的標識,接口卡302向客戶端a發(fā)送寫鎖請求查詢響應消息,寫鎖請求查詢響應消息中攜帶客戶端b的標識,客戶端a根據寫鎖請求查詢響應消息攜帶的客戶端b的標識向客戶端b發(fā)送通知,通知客戶端b申請寫鎖,客戶端b根據客戶端a的通知向接口卡302發(fā)送寫鎖請求,具體請參見前面客戶端發(fā)送寫鎖請求的描述,在此不再贅述。因此,可根據處于寫鎖等待狀態(tài)的客戶端在寫鎖請求隊列中從隊首開始的順序申請寫鎖。可選的,客戶端a釋放寫鎖后,鎖服務器的接口卡302查詢寫鎖請求隊列隊首開始的下一個內存地址存儲客戶端b的標識,接口卡302向客戶端b發(fā)送通知,通知客戶端b申請寫鎖,客戶端b根據接口卡302發(fā)送的通知向接口卡302發(fā)送寫鎖請求消息。

      可選的,上述實施例中,客戶端向接口卡302發(fā)送寫鎖請求中還攜帶客戶端的寫鎖優(yōu)先級,寫鎖請求隊列中存儲客戶端的標識和寫鎖優(yōu)先級,當客戶端a釋放寫鎖,還包括:客戶端a向接口卡302發(fā)送寫鎖請求查詢消息,接口卡302向客戶端a發(fā)送寫鎖請求查詢響應消息,查詢響應消息中攜帶寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端的標識及寫鎖優(yōu)先級,本發(fā)明實施例中以客戶端b的寫鎖優(yōu)先級最高為例,客戶端a根據寫鎖請求查詢響應消息確定寫鎖優(yōu)先級最高的客戶端,客戶端a向客戶端b發(fā)送通知,指示客戶端b向接口卡302發(fā)送寫鎖請求,具體請參見前面客戶端發(fā)送寫鎖請求的描述,在此不再贅述。因此,可根據處于寫鎖等待狀態(tài)的客戶端的寫鎖請求優(yōu)先級申請寫鎖??蛇x的,上述實施例中,客戶端向接口卡302發(fā)送寫鎖請求中還攜帶客戶端的寫鎖優(yōu)先級,寫鎖請求隊列中存儲客戶端的標識和寫鎖優(yōu)先級。客戶端a釋放寫鎖后,鎖服務器的接口卡302查詢寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端的寫鎖優(yōu)先級確定寫鎖優(yōu)先級最高的客戶端,例如客戶端b,接口卡302向客戶端b發(fā)送通知,通知客戶端b申請寫鎖,客戶端b根據接口卡302發(fā)送的通知向接口卡302發(fā)送寫鎖請求消息。

      可選的,當寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端為多個時,當客戶端a釋放寫鎖,還包括:客戶端a向接口卡302發(fā)送寫鎖請求查詢消息,接口卡302查詢寫鎖請求隊列確定處于寫鎖等待狀態(tài)的客戶端,接口卡302向客戶端a發(fā)送寫鎖請求查詢響應消息,寫鎖請求查詢響應消息中攜帶處于寫鎖等待狀態(tài)的客戶端的標識,客戶端a根據寫鎖請求查詢響應消息向處于寫鎖等待狀態(tài)的客戶端中的至少兩個發(fā)送通知,指示客戶端向接口卡302發(fā)送寫鎖請求。因此,寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端都有相同的機會獲得寫鎖??蛇x的,當客戶端a釋放寫鎖,還包括:接口卡302查詢寫鎖請求隊列確定處于寫鎖等待狀態(tài)的客戶端,接口卡302向處于寫鎖等待狀態(tài)的客戶端中的至少兩個發(fā)送通知,指示至少兩個客戶端向接口卡302發(fā)送寫鎖請求。

      可選的,當讀鎖請求隊列中存儲客戶端c和d的標識,即客戶端c和d處于讀鎖等待狀態(tài),當客戶端a釋放寫鎖,還包括:客戶端a向接口卡302發(fā)送讀鎖請求查詢消息,接口卡302查詢讀鎖請求隊列確定處于讀鎖等待狀態(tài)的客戶端c和d,接口卡302向客戶端a發(fā)送讀鎖請求查詢響應消息,讀鎖請求查詢響應消息中攜帶處于讀鎖等待狀態(tài)的客戶端c和d的標識。可選的,客戶端a根據讀鎖請求查詢響應消息向處于讀鎖等待狀態(tài)的客戶端c和d發(fā)送通知,指示客戶端c和d申請讀鎖,則客戶端c和d分別向接口卡302發(fā)送讀鎖分配計數修改請求,接口卡302根據客戶端c和d的讀鎖分配計數修改請求增加讀鎖分配計數??蛇x的,戶端a根據讀鎖請求查詢響應消息向處于讀鎖等待狀態(tài)的客戶端c發(fā)送通知以申請讀鎖,則客戶端c向接口卡302發(fā)送讀鎖分配計數修改請求,接口卡302根據客戶端c的讀鎖分配計數修改請求增加讀鎖分配計數。因此,讀鎖請求隊列中記錄的處于讀鎖等待狀態(tài)的客戶端都可以獲得讀鎖??蛇x的,當客戶端a釋放寫鎖,還包括:接口卡302查詢讀鎖請求隊列確定處于讀鎖等待狀態(tài)的客戶端c和d,接口卡302向處于讀鎖等待狀態(tài)的客戶端c和d發(fā)送通知,指示客戶端c和d申請讀鎖,則客戶端c和d分別向接口卡302發(fā)送讀鎖分配計數修改請求,接口卡302根據客戶端c和d的讀鎖分配計數修改請求增加讀鎖分配計數。

      可選的,當客戶端a釋放寫鎖,具體包括:客戶端a向接口卡302發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址,接口卡302從寫鎖請求隊列隊首的內存地址刪除客戶端a的標識。客戶端a向接口卡302發(fā)送寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列隊首開始的下一個內存地址,接口卡302查詢從寫鎖請求隊列隊首開始的下一個內存地址存儲客戶端b的標識,接口卡302向客戶端a發(fā)送寫鎖請求查詢響應消息,寫鎖請求查詢響應消息中攜帶客戶端b的標識,客戶端a根據寫鎖請求查詢響應消息向接口卡302發(fā)送寫鎖占用請求,寫鎖占用請求攜帶寫鎖請求隊列隊首的內存地址和客戶端b的標識,接口卡302將客戶端b的標識寫入寫鎖請求隊列隊首的內存地址,接口卡302向客戶端a發(fā)送寫鎖占用請求響應消息表明將客戶端b的標識寫入寫鎖請求隊列隊首的內存地址,客戶端a根據寫鎖占用請求響應消息,向客戶端b發(fā)送通知,表明客戶端b獲得寫鎖。因此,可保證從寫鎖請求隊列隊首開始的下一個內存地址記錄的處于寫鎖等待的客戶端能夠獲得寫鎖??蛇x的,當客戶端a釋放寫鎖,還包括:接口卡302查詢從寫鎖請求隊列隊首開始的下一個內存地址存儲客戶端b的標識,接口卡302將客戶端b的標識寫入寫鎖請求隊列隊首的內存地址,接口卡302向客戶端b發(fā)送通知,表明客戶端b獲得寫鎖。

      可選的,客戶端向接口卡302發(fā)送寫鎖請求中還攜帶客戶端的寫鎖優(yōu)先級,寫鎖請求隊列中存儲客戶端的標識和寫鎖優(yōu)先級,當客戶端a釋放寫鎖,具體包括:客戶端a向接口卡302發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址,接口卡302從寫鎖請求隊列隊首的內存地址刪除客戶端a的標識??蛻舳薬向接口卡302發(fā)送寫鎖請求查詢消息,接口卡302向客戶端a發(fā)送寫鎖請求查詢響應消息,寫鎖請求響應消息攜帶寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端的標識及寫鎖優(yōu)先級,本發(fā)明實施例中以客戶端b的寫鎖優(yōu)先級最高為例,客戶端a根據寫鎖請求查詢響應消息向接口卡302發(fā)送寫鎖占用請求,寫鎖占用請求攜帶寫鎖請求隊列隊首的內存地址和客戶端b的標識,接口卡302將客戶端b的標識寫入寫鎖請求隊列隊首的內存地址,接口卡302向客戶端a發(fā)送寫鎖占用請求響應消息表明將客戶端b的標識寫入寫鎖請求隊列隊首的內存地址,客戶端a根據寫鎖占用請求響應消息,向客戶端b發(fā)送通知,表明客戶端b獲得寫鎖??蛇x的,客戶端向接口卡302發(fā)送寫鎖請求中還攜帶客戶端的寫鎖優(yōu)先級,寫鎖請求隊列中存儲客戶端的標識和寫鎖優(yōu)先級,當客戶端a釋放寫鎖,接口卡302查詢寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端的標識及寫鎖優(yōu)先級,本發(fā)明實施例中以客戶端b的寫鎖優(yōu)先級最高為例,接口卡302將客戶端b的標識寫入寫鎖請求隊列隊首的內存地址,接口卡302向客戶端b發(fā)送通知,表明客戶端b獲得寫鎖。

      可選的,寫鎖請求隊列中記錄多個處于寫鎖等待狀態(tài)的客戶端的標識,當客戶端a釋放寫鎖,具體包括:客戶端a向接口卡302發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址,接口卡302從寫鎖請求隊列隊首的內存地址刪除客戶端a的標識??蛻舳薬向接口卡302發(fā)送寫鎖請求查詢消息,接口卡302向客戶端a發(fā)送寫鎖請求查詢響應消息,寫鎖請求響應消息攜帶寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端的標識,客戶端a根據寫鎖請求查詢響應消息隨機確定客戶端,例如客戶端b,向接口卡302發(fā)送寫鎖占用請求,寫鎖占用請求攜帶寫鎖請求隊列隊首的內存地址和客戶端b的標識,接口卡302將客戶端b的標識寫入寫鎖請求隊列隊首的內存地址,接口卡302向客戶端a發(fā)送寫鎖占用請求響應消息表明將客戶端b的標識寫入寫鎖請求隊列隊首的內存地址,客戶端a根據寫鎖占用請求響應消息,向客戶端b發(fā)送通知,表明客戶端b獲得寫鎖??蛇x的,當客戶端a釋放寫鎖,還包括:接口卡302查詢寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端的標識,接口卡302從處于寫鎖等待狀態(tài)的客戶端中隨機確定一個客戶端,例如客戶端b,接口卡302將客戶端b的標識寫入寫鎖請求隊列隊首的內存地址,接口卡302向客戶端b發(fā)送通知,表明客戶端b獲得寫鎖。

      可選的,當讀鎖請求隊列中存儲客戶端c和d的標識,當客戶端a釋放寫鎖,還包括:客戶端a向接口卡302發(fā)送讀鎖請求查詢消息,接口卡302查詢讀鎖請求隊列確定處于讀鎖等待狀態(tài)的客戶端c和d,接口卡302向客戶端a發(fā)送讀鎖請求查詢響應消息,讀鎖請求查詢響應消息中攜帶處于讀鎖等待狀態(tài)的客戶端c和d的標識,客戶端a根據讀鎖請求查詢響應消息向接口卡302發(fā)送讀鎖分配計數修改請求,讀鎖分配計數修改請求攜帶分配讀鎖的數量,可選的,分配讀鎖的數量為2,接口卡302根據分配讀鎖的數量增加讀鎖分配計數,接口卡302向客戶端a返回讀鎖分配計數修改請求響應,客戶端a向客戶c和d發(fā)送通知??蛇x的,分配讀鎖的數量為1,接口卡302根據分配讀鎖的數量增加讀鎖分配計數,接口卡302向客戶端a返回讀鎖分配計數修改請求響應,客戶端a通知客戶端c或d獲得讀鎖??蛇x的,當讀鎖請求隊列中存儲客戶端c和d的標識,當客戶端a釋放寫鎖,還包括:接口卡302查詢讀鎖請求隊列確定處于讀鎖等待狀態(tài)的客戶端c和d,接口卡302根據客戶端c和d分配讀鎖的數量增加讀鎖分配計數,接口卡302向客戶端c或d發(fā)送通知,表明獲得讀鎖。

      可選的,當獲得讀鎖的客戶端c和d釋放讀鎖,客戶端c向接口卡302發(fā)送讀鎖釋放請求,讀鎖釋放請求中攜帶客戶端c的標識和讀鎖請求隊列中存儲客戶端c的標識的內存地址,接口卡302刪除讀鎖請求隊列中客戶端c的標識,減少讀鎖分配計數。同理,客戶端d釋放讀鎖,參考上述操作,讀鎖分配計數減為0??蛻舳薲還向接口卡302發(fā)送寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列隊首的內存地址,接口卡302向客戶端d返回寫鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶寫鎖請求隊列隊首的內存地址存儲的客戶端的標識,客戶端d根據該客戶端的標識通知該客戶端向接口卡302申請寫鎖??蛻舳讼蚪涌诳?02申請寫鎖包括:客戶端向接口卡302發(fā)送寫鎖分配標識修改請求,接口卡302將寫鎖分配標識置為1??蛇x的,當獲得讀鎖的客戶端c和d釋放讀鎖,接口卡302查詢寫鎖請求隊列隊首的內存地址存儲的客戶端的標識,接口卡302根據該客戶端的標識通知該客戶端向接口卡302申請寫鎖。

      可選的,當獲得讀鎖的客戶端c和d釋放讀鎖,客戶端c向接口卡302發(fā)送讀鎖釋放請求,讀鎖釋放請求中攜帶客戶端c的標識和讀鎖請求隊列中存儲客戶端c的標識的內存地址,接口卡302刪除讀鎖請求隊列中客戶端c的標識,減少讀鎖分配計數。同理,客戶端d釋放讀鎖,參考上述操作,讀鎖分配計數減為0??蛻舳薲向接口卡302發(fā)送寫鎖分配標識修改請求,接口卡302將寫鎖分配標識修改為已經分配寫鎖(本發(fā)明實施例中置為1),接口卡302向客戶端d返回寫鎖分配標識修改請求響應,寫鎖分配標識修改請求響應攜帶寫鎖請求隊列隊首內存地址存儲的客戶端的標識,客戶端d根據該客戶端的標識通知該客戶端獲得寫鎖。可選的,當獲得讀鎖的客戶端c和d釋放讀鎖,接口卡302將寫鎖分配標識修改為已經分配寫鎖(本發(fā)明實施例中置為1),接口卡302查詢寫鎖請求隊列隊首的內存地址存儲的客戶端的標識,通知該客戶端獲得寫鎖。

      可選的,本發(fā)明實施例還提供讀鎖召回策略。本發(fā)明實施例中,集群還包括客戶端e。當客戶端e向接口卡302發(fā)送寫鎖請求,具體操作參考前述客戶端b發(fā)送寫鎖請求的操作??蛻舳薳處于寫鎖等待狀態(tài),客戶端c和d持有讀鎖,客戶端e通知客戶端c和d釋放讀鎖??蛻舳薱向接口卡302發(fā)送釋放讀鎖請求,具體操作請參見前述客戶端c釋放讀鎖的操作??蛻舳薲向接口卡302發(fā)送釋放讀鎖請求,具體操作請參見前述客戶端c釋放讀鎖的操作。釋放客戶端c和d持有的讀鎖后,內存301中讀鎖分配計數為0。可選的,接口卡302向客戶端e發(fā)送消息,通知客戶端e申請寫鎖。可選的,接口卡302向客戶端d發(fā)送消息,客戶端d的讀鎖釋放成功,客戶端d向客戶端e發(fā)送消息,通知客戶端e申請寫鎖。

      本發(fā)明前面的實施例以一個客戶端一次申請一個讀鎖為例進行描述,在客戶端申請讀鎖時,當客戶端申請的讀鎖數量為多個時,接口卡302根據申請的讀鎖的數量將增加內存301中的讀鎖分配計數,在讀鎖請求隊列中記錄多個客戶端的標識,釋放讀鎖的時候,根據申請的讀鎖的數量將減少內存301中的讀鎖分配計數,從讀鎖請求隊列中刪除多個客戶端的標識??蛻舳税l(fā)送寫鎖請求可以使用rdma協議中的原子操作compare-and-swap,客戶端發(fā)送讀鎖請求可以使用rdma協議中的原子操作fetch-and-add。

      本發(fā)明實施例中,客戶端向接口卡302發(fā)送查詢消息,如寫鎖請求查詢消息、讀鎖請求查詢消息,可以在一次查詢消息中攜帶多個待查詢的內存地址,如寫請求隊列的內存地址或讀鎖請求隊列的內存地址,也可以一次攜帶一個待查詢的內存地址,通過多次查詢消息完成查詢。

      根據本發(fā)明實施例提供的集群中鎖管理方案,相應提供了一種客戶端1100,如圖11所示,客戶端1100應用于集群中作為集群中多個客戶端中的第一客戶端,所集群還包含本發(fā)明實施例描述的鎖服務器,鎖服務器包含接口卡302和內存301,內存301中存儲有寫鎖請求隊列、寫鎖分配標識和讀鎖分配計數;其中,寫鎖請求隊列用于記錄集群中針對同一共享資源處于寫鎖等待狀態(tài)和獲得寫鎖的客戶端的標識,寫鎖分配標識用于表示是否分配針對共享資源的寫鎖,讀鎖分配計數用于表示針對共享資源分配讀鎖的數量;客戶端1100包括發(fā)送單元1101和接收單元1102。其中,發(fā)送單元1101,用于向鎖服務器的接口卡302發(fā)送第一寫鎖請求;第一寫鎖請求攜帶客戶端1100的標識和寫鎖請求隊列隊首的內存地址;接收單元1102,用于接收接口卡302發(fā)送的第一消息,第一消息表明接口卡302將客戶端1100的標識寫入寫鎖請求隊列隊首的內存地址以及表明客戶端1100獲得寫鎖或處于寫鎖等待狀態(tài);發(fā)送單元1101,還用于當第一消息表明接口卡302將客戶端1100的標識寫入寫鎖請求隊列隊首的內存地址失敗,向接口卡302發(fā)送第二寫鎖請求;第二寫鎖請求攜帶客戶端1100的標識和寫鎖請求隊列的第一內存地址;第一內存地址為從隊首到隊尾的順序中可寫入客戶端1100的標識的內存地址。可選的,第一內存地址為從隊首到隊尾的順序中第一個可寫入客戶端1100的標識的內存地址。

      本發(fā)明實施例提供的如圖11所示的客戶端1100,可選的,發(fā)送單元1101還用于當客戶端1100獲得寫鎖后,向接口卡302發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址。

      本發(fā)明另一實施例中,如圖11所示的客戶端1100,應用于集群中作為多個客戶端中的第一客戶端,集群還包含鎖服務器,鎖服務器包含接口卡302和內存301,內存301中存儲有讀鎖請求隊列和寫鎖分配標識;其中,讀鎖請求隊列用于記錄集群中針對同一共享資源處于讀鎖等待狀態(tài)或獲得讀鎖的客戶端的標識,寫鎖分配標識用于表示是否分配針對共享資源的寫鎖;發(fā)送單元1101,用于向接口卡302發(fā)送第一讀鎖請求;第一讀鎖請求攜帶客戶端1100的標識和讀鎖請求隊列的第一內存地址;接收單元1102,用于接收接口卡302發(fā)送的第一消息,所述第一消息攜帶寫鎖分配標識??蛇x的,當寫鎖分配標識表明已經分配了寫鎖,則第一消息表明客戶端1100處于讀鎖等待狀態(tài)??蛇x的,當寫鎖分配標識表明沒有分配寫鎖,則第一消息表明客戶端1100獲得讀鎖??蛇x的,多個客戶端中還包括第二客戶端,讀鎖請求隊列隊首的內存地址存儲第二客戶端的標識;則第一讀鎖請求攜帶所述讀鎖請求隊列的第一內存地址為為從讀鎖請求隊列隊首到隊尾的順序中,可寫入客戶端1100的標識的內存地址。可選的,第一內存地址為為從讀鎖請求隊列隊首到隊尾的順序中,第一個可寫入客戶端1100的標識的內存地址。可選的,發(fā)送單元1101向接口卡302發(fā)送第一讀鎖請求之前,還用于向接口卡302發(fā)送第二讀鎖請求;第二讀鎖請求攜帶1100客戶端的標識和讀鎖請求隊列隊首的內存地址;當接口卡302向讀鎖請求隊列隊首的內存地址寫入客戶端1100的標識失敗,接收單元1102還用于接收接口卡302發(fā)送的第二消息,第二消息表明讀鎖請求失敗??蛇x的,當客戶端1100獲得讀鎖,發(fā)送單元1102,還用于向接口卡302發(fā)送讀鎖釋放請求;讀鎖釋放請求攜帶讀鎖請求隊列中存儲客戶端1100的標識的內存地址。

      本發(fā)明另一實施例中,如圖11所示的客戶端1100,應用于集群中作為第一客戶端,集群還包括鎖服務器和第二客戶端。其中,鎖服務器包括接口卡302和內存301,內存301中存儲寫鎖請求隊列和寫鎖分配標識,寫鎖請求隊列隊首的內存地址存儲客戶端1100的標識,寫鎖請求隊列還存儲第二客戶端的標識,寫鎖分配標識表明已經分配寫鎖,客戶端1100獲得共享資源的寫鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);發(fā)送單元1101用于向所述接口卡302發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址,當接口卡302根據寫鎖請求隊列隊首的內存地址刪除寫鎖請求隊列中客戶端1100的標識時,向所述接口卡302發(fā)送寫鎖請求查詢消息,寫鎖請求查詢消息攜帶所述寫鎖請求隊列存儲第二客戶端的標識的內存地址;接收單元1102用于接收接口卡302發(fā)送的寫鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶所述第二客戶端的標識;發(fā)送單元1101用于向接口卡302發(fā)送寫鎖占用請求,寫鎖占用請求攜帶第二客戶端的標識和寫鎖請求隊列隊首的內存地址;接收單元1101還用于接收接口卡302發(fā)送的寫鎖占用請求響應,表明將第二客戶端的標識寫入寫鎖請求隊列隊首的內存地址;發(fā)送單元1101還用于向所述第二客戶端發(fā)送通知,通知表明第二客戶端獲得寫鎖??蛇x的,寫鎖請求隊列存儲第二客戶端的標識的內存地址為從寫鎖請求隊列隊首開始的下一個內存地址??蛇x的,寫鎖請求隊列還存儲第二客戶端的寫鎖優(yōu)先級,其中,第二客戶端的寫鎖優(yōu)先級在寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端中最高。

      本發(fā)明另一實施例中,如圖11所示的客戶端1100,應用于集群中作為第一客戶端,集群還包括鎖服務器和第二客戶端。其中,鎖服務器包括接口卡302和內存301,內存301中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,寫鎖請求隊列隊首的內存地址存儲客戶端1100的標識,讀鎖請求隊列存儲第二客戶端的標識,寫鎖分配標識表明已經分配寫鎖,讀鎖分配計數為0,客戶端1100獲得共享資源的寫鎖,第二客戶端針對該共享資源處于讀鎖等待狀態(tài);發(fā)送單元1101用于向接口卡302發(fā)送寫鎖釋放請求寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址,當接口卡302將寫鎖分配標識置為未分配寫鎖狀態(tài)并根據寫鎖請求隊列隊首的內存地址刪除寫鎖請求隊列中客戶端1100的標識時,向接口卡302發(fā)送讀鎖請求查詢消息;接收單元1102用于接收接口卡302發(fā)送的讀鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識;發(fā)送單元1101還用于向接口卡302發(fā)送讀鎖分配計數修改請求,從而使第二客戶端獲得讀鎖。

      本發(fā)明另一實施例中,如圖11所示的客戶端1100,應用于集群中作為第一客戶端,集群還包括鎖服務器和第二客戶端。其中,鎖服務器包括接口卡302和內存301,內存301中存儲寫鎖請求隊列和寫鎖分配標識,寫鎖請求隊列隊首的內存地址存儲客戶端1100的標識,寫鎖請求隊列還存儲第二客戶端的標識,寫鎖分配標識表明已經分配寫鎖,客戶端1100獲得共享資源的寫鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);發(fā)送單元1101用于向接口卡302發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址,當接口卡302將寫鎖分配標識置為未分配寫鎖狀態(tài)并根據寫鎖請求隊列隊首的內存地址刪除寫鎖請求隊列中客戶端1100的標識時,向接口卡302發(fā)送寫鎖請求查詢消息,所寫鎖請求查詢消息攜帶寫鎖請求隊列存儲第二客戶端的標識的內存地址;接收單元1102用于接收接口卡302發(fā)送的寫鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識;發(fā)送單元1101根據第二客戶端的標識向第二客戶端發(fā)送通知,通知用于指示第二客戶端向接口卡302發(fā)送寫鎖請求??蛇x的,寫鎖請求隊列存儲第二客戶端的標識的內存地址為從寫鎖請求隊列隊首開始的下一個內存地址??蛇x的,寫鎖請求隊列還存儲第二客戶端的寫鎖優(yōu)先級,其中,第二客戶端的寫鎖優(yōu)先級在寫鎖請求隊列中記錄的處于寫鎖等待狀態(tài)的客戶端中最高。

      本發(fā)明另一實施例中,如圖11所示的客戶端1100,應用于集群中作為第一客戶端,集群還包括鎖服務器和第二客戶端。其中,鎖服務器包括接口卡302和內存301,內存301中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,寫鎖請求隊列隊首的內存地址存儲客戶端1100的標識,讀鎖請求隊列存儲第二客戶端的標識,寫鎖分配標識表明已經分配寫鎖,所述讀鎖分配計數為0,客戶端1100獲得共享資源的寫鎖,第二客戶端針對該共享資源處于讀鎖等待狀態(tài);發(fā)送單元1101用于向接口卡302發(fā)送寫鎖釋放請求,寫鎖釋放請求攜帶寫鎖請求隊列隊首的內存地址,當接口卡302將寫鎖分配標識置為未分配寫鎖狀態(tài)并根據寫鎖請求隊列隊首的內存地址刪除寫鎖請求隊列中客戶端1100的標識時,向所述接口卡302發(fā)送讀鎖請求查詢消息;接收單元1102用于接收接口卡302發(fā)送的讀鎖請求查詢響應消息,讀鎖請求查詢響應消息攜帶第二客戶端的標識;發(fā)送單元1101還用于根據第二客戶端的標識向第二客戶端發(fā)送通知,通知用于指示第二客戶端申請讀鎖,第二客戶端根據該通知向接口卡302發(fā)送讀鎖分配計數修改請求,接口卡302根據第二客戶端分配的讀鎖數量增量讀鎖分配計數。

      本發(fā)明另一實施例中,如圖11所示的客戶端1100,應用于集群中作為第一客戶端,集群還包括鎖服務器和第二客戶端。其中,鎖服務器包括接口卡302和內存301,內存301中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,讀鎖請求隊列存儲客戶端1100的標識,寫鎖請求隊列隊首的內存地址存儲第二客戶端的標識,寫鎖分配標識表明未分配寫鎖,讀鎖分配計數為客戶端1100獲得的讀鎖數量,客戶端1100獲得共享資源的讀鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);發(fā)送單元1101用于向接口卡302發(fā)送讀鎖釋放請求,讀鎖釋放請求攜帶讀鎖請求隊列存儲客戶端1100的標識的內存地址,當接口卡302將讀鎖分配計數減為0并根據讀鎖請求隊列存儲客戶端1100的標識的內存地址刪除讀鎖請求隊列中客戶端1100的標識時,向接口卡302發(fā)送寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列隊首的內存地址;接收單元1102用于接收接口卡302發(fā)送的寫鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識;發(fā)送單元1101還用于根據第二客戶端的標識向第二客戶端發(fā)送通知,通知用于指示第二客戶端申請寫鎖,第二客戶端根據該通知向接口卡302發(fā)送寫鎖分配標識修改請求,接口卡302將寫鎖分配標識置為已經分配寫鎖狀態(tài)。

      本發(fā)明另一實施例中,如圖11所示的客戶端1100,應用于集群中作為第一客戶端,集群還包括鎖服務器和第二客戶端。其中,鎖服務器包括接口卡302和內存301,內存301中存儲寫鎖請求隊列、讀鎖請求隊列、讀鎖分配計數和寫鎖分配標識,讀鎖請求隊列存儲客戶端1100的標識,寫鎖請求隊列隊首的內存地址存儲第二客戶端的標識,寫鎖分配標識表明未分配寫鎖,讀鎖分配計數為客戶端1100獲得的讀鎖數量,客戶端1100獲得共享資源的讀鎖,第二客戶端針對該共享資源處于寫鎖等待狀態(tài);發(fā)送單元1101用于向接口卡302發(fā)送讀鎖釋放請求,讀鎖釋放請求攜帶讀鎖請求隊列存儲客戶端1100的標識的內存地址,當接口卡302將讀鎖分配計數減為0并根據讀鎖請求隊列存儲客戶端1100的標識的內存地址刪除讀鎖請求隊列中客戶端1100的標識時,向接口卡302發(fā)送寫鎖請求查詢消息,寫鎖請求查詢消息攜帶寫鎖請求隊列隊首的內存地址;接收單元1102接收接口卡302發(fā)送的寫鎖請求查詢響應消息,寫鎖請求查詢響應消息攜帶第二客戶端的標識;發(fā)送單元1102還用于向接口卡302發(fā)送寫鎖分配標識修改請求,當接口卡302根據寫鎖分配標識修改請求將寫鎖分配標識置為已經分配寫鎖狀態(tài)時,根據第二客戶端的標識向第二客戶端發(fā)送通知,通知表明第二客戶端獲得寫鎖。

      本發(fā)明實施例提供的客戶端1100實現的功能可參考前面實施例中客戶端a、客戶端b、客戶端c和客戶端d對應的描述??蛻舳?100的實現的效果請參見前面實施列的描述。

      如圖11所示的客戶端1100,一種實現方式為客戶端1100安裝上有述單元,上述單元可被加載到客戶端1100的內存中,由客戶端1100的cpu執(zhí)行內存中的指令,實現本發(fā)明對應的實施例中的功能;另一種實現,客戶端1100中包含的單元可以由硬件來實現,或者由軟件與硬件組合實現。上述單元也稱為結構單元。

      本發(fā)明實施例,還提供了非易失性計算機可讀存儲介質和計算機程序產品,當圖11所示的客戶端1100的內存加載非易失性計算機可讀存儲介質和計算機程序產品中包含的計算機指令,cpu執(zhí)行內存中加載的該計算機指令,以實現本發(fā)明各實施中對應的功能。

      在本發(fā)明所提供的幾個實施例中,應該理解到,所公開的裝置、方法,可以通過其它的方式實現。例如,以上所描述的裝置實施例所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。

      所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上??梢愿鶕嶋H的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。

      另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。

      當前第1頁1 2 
      網友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1