專利名稱:一種圖案協(xié)同設(shè)計(jì)中的復(fù)雜加鎖方法
技術(shù)領(lǐng)域:
本發(fā)明涉及基于因特網(wǎng)的分布式圖案協(xié)同設(shè)計(jì)技術(shù),特別是涉及一種圖案協(xié)同設(shè)計(jì)中對(duì)象鎖和區(qū)域鎖同時(shí)存在的復(fù)雜加鎖方法。
背景技術(shù):
隨著社會(huì)分工的深化,人們的協(xié)同行為也必然會(huì)越來(lái)越廣泛,而計(jì)算機(jī)與信息技術(shù)的發(fā)展,為這些協(xié)同提供了交互的平臺(tái),這個(gè)平臺(tái)的作用是使得一個(gè)群體可以通過(guò)互聯(lián)網(wǎng)在異地協(xié)同完成一項(xiàng)共同的任務(wù)。它要給這個(gè)群體一種在同一個(gè)會(huì)議室工作的感覺(jué),它的目標(biāo)是傳輸各種明顯或不明顯的參與者的動(dòng)作,例如聲音,手勢(shì)等等。
基于Internet的分布式實(shí)時(shí)協(xié)同編輯系統(tǒng),可以允許一組用戶通過(guò)Internet同時(shí)觀看和編輯同一份文檔/圖形/圖像/多媒體文檔。
基于Internet的分布式協(xié)同編輯系統(tǒng)中,解決并行沖突的方式有些采用了鎖,有些不需要用戶申請(qǐng)鎖。在分布式協(xié)同圖案編輯系統(tǒng)中,由于圖形圖像本身的特殊性,為了防止并行操作中出現(xiàn)沖突,鎖被廣泛的應(yīng)用。加鎖的目的是為了更好的協(xié)同,所以加鎖必須從用戶的角度考慮操作的方便性和實(shí)用性。
鎖的類型由不同的分類標(biāo)準(zhǔn)可以有不同的劃分。其中一種劃分方式是對(duì)象鎖與區(qū)域鎖。
在一個(gè)圖案設(shè)計(jì)過(guò)程中,用戶感興趣的是本用戶的任務(wù)部分,用戶不期望其他用戶更改的也只是自己認(rèn)為敏感的圖形對(duì)象,用戶將選擇關(guān)心的圖形對(duì)象進(jìn)行加鎖。對(duì)象鎖是用來(lái)鎖定圖案中的圖形對(duì)象的鎖機(jī)制。采用對(duì)象鎖使得加鎖的粒度細(xì)化。提高了系統(tǒng)的響應(yīng),并且,使得協(xié)同用戶的聚焦度增強(qiáng)。
如果用戶需要同時(shí)編輯的對(duì)象比較多,或者,用戶感興趣的是一個(gè)圖案的區(qū)域,并且不期望其他用戶涉及到這些對(duì)象或者區(qū)域,用戶將選擇關(guān)心的區(qū)域加鎖。區(qū)域鎖是用戶對(duì)其指定的圖案區(qū)域加鎖,在一個(gè)基于圖形對(duì)象的圖案中,鎖定一個(gè)區(qū)域意味著同時(shí)鎖定了區(qū)域包含的對(duì)象。其他用戶不能進(jìn)入該區(qū)域進(jìn)行操作,也不能操作區(qū)域包含的對(duì)象。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種圖案協(xié)同設(shè)計(jì)中的復(fù)雜加鎖方法。
本發(fā)明解決其技術(shù)問(wèn)題采用的技術(shù)方案如下
1)用戶設(shè)計(jì)圖案過(guò)程中,圖形對(duì)象與設(shè)計(jì)區(qū)域存在以下關(guān)系定義1半包圍鎖定給定一個(gè)圖形對(duì)象和一個(gè)區(qū)域鎖,當(dāng)區(qū)域鎖的輪廓包圍對(duì)象的一部分時(shí),圖形對(duì)象與區(qū)域鎖二者共同所處的狀態(tài)稱作半包圍鎖定;定義2全包圍鎖定給定一個(gè)圖形對(duì)象和一個(gè)區(qū)域鎖,當(dāng)區(qū)域鎖的輪廓包圍對(duì)象的全部時(shí),圖形對(duì)象與區(qū)域鎖二者共同所處的狀態(tài)稱作全包圍鎖定;定義3相關(guān)包圍鎖定當(dāng)用戶鎖定一個(gè)區(qū)域時(shí),用戶不但同時(shí)鎖定處于全包圍鎖定狀態(tài)的對(duì)象,并且也同時(shí)鎖定處于半包圍鎖定狀態(tài)的對(duì)象,而不是只鎖定其一部分;這樣的鎖定稱作相關(guān)包圍鎖定;定義4相關(guān)包圍對(duì)象集合REOS給定一個(gè)用戶的區(qū)域鎖,所有與該區(qū)域鎖處于相關(guān)包圍鎖定狀態(tài)的圖形對(duì)象都屬于REOS;2)圖案設(shè)計(jì)用戶User K擁有的鎖權(quán)限是一個(gè)二元組{LockSetkregion,LockSetkobject},其中LockSetkregion是User k擁有的區(qū)域鎖集合,該集合中的每一個(gè)元素由兩部分組成,其一是User k擁有的區(qū)域本身,其二是該區(qū)域的相關(guān)包圍對(duì)象集合REOS;LockSetkregion的表示形式如下{[Region1k,REOSregion1k(Object11k,Object12k,Object13k...)],[Region2k,REOSregion2k(Object21k,Object22k,Object23k...)]...}]]>每一項(xiàng)的上標(biāo)表示這個(gè)區(qū)域或?qū)ο蟮乃姓?;LockSetkobject是User k擁有的獨(dú)立對(duì)象鎖集合,這里的獨(dú)立對(duì)象鎖所指的是這個(gè)對(duì)象鎖不屬于任何一個(gè)區(qū)域鎖;3)重復(fù)鎖定的處理方法a.當(dāng)用戶鎖定一個(gè)對(duì)象之后又鎖定一個(gè)區(qū)域,而這個(gè)區(qū)域全包圍或半包圍這個(gè)鎖定的對(duì)象系統(tǒng)將提示用戶是否把該對(duì)象的鎖權(quán)限加入該區(qū)域;b.當(dāng)用戶鎖定一個(gè)區(qū)域之后又鎖定另一個(gè)區(qū)域,而這兩個(gè)區(qū)域是有重疊的部分允許同一用戶鎖定重疊的區(qū)域;c.當(dāng)用戶鎖定一個(gè)區(qū)域及其對(duì)象,之后用戶釋放了其中一些對(duì)象,一段時(shí)間后用戶又試圖對(duì)它們加鎖系統(tǒng)將提示用戶或者把該對(duì)象的鎖權(quán)限加入該區(qū)域,或者獨(dú)立為一個(gè)對(duì)象鎖;d.當(dāng)用戶鎖定一個(gè)對(duì)象之后又鎖定該對(duì)象忽略第二次鎖定;
e.當(dāng)用戶鎖定一個(gè)區(qū)域之后又鎖定該區(qū)域忽略第二次鎖定;4)限制用戶操作的處理方法a.當(dāng)一用戶鎖定一個(gè)對(duì)象其他用戶不可以對(duì)該對(duì)象進(jìn)行編輯操作;b.當(dāng)一用戶鎖定一個(gè)區(qū)域其他用戶不可以移動(dòng)對(duì)象進(jìn)入該區(qū)域,其他用戶新建的對(duì)象與該區(qū)域不能處于的半包圍鎖定或全包圍鎖定狀態(tài);其他用戶不可以對(duì)區(qū)域鎖定的對(duì)象進(jìn)行編輯操作;其他用戶鎖定的區(qū)域不可以與該區(qū)域有相交的部分;5)特殊情況的處理方法存在這樣一種情況,用戶A的區(qū)域鎖鎖定一系列對(duì)象,用戶B此時(shí)試圖編輯這一系列對(duì)象中的單個(gè)對(duì)象Objecta;A可以只釋放Objecta的權(quán)限;存在另一種情況,用戶A的區(qū)域鎖已經(jīng)鎖定一系列對(duì)象(包括Objecta),用戶B此時(shí)試圖鎖定另一個(gè)區(qū)域,而這個(gè)區(qū)域與Objecta處于相關(guān)包圍鎖定狀態(tài),采取處理是Objecta的鎖權(quán)限歸屬于A,允許A操作Objecta在B中移動(dòng)的方式;加入B對(duì)Objecta的可等待機(jī)制。
本發(fā)明與背景技術(shù)相比,具有的有益的效果是本發(fā)明采用對(duì)象鎖和區(qū)域鎖并行的方式。這樣細(xì)粒度與粗粒度的結(jié)合使得用戶的選擇更為多樣,盡管由這種設(shè)計(jì)增加了系統(tǒng)設(shè)計(jì)的復(fù)雜度,但有效的緩解了鎖的獨(dú)占性與協(xié)同的共享性之間的矛盾,以及用戶使用的方便靈活操作與系統(tǒng)的高負(fù)載之間的矛盾。
圖1是半包圍鎖定的示意圖;圖2是全包圍鎖定的示意圖;圖3是相關(guān)包圍對(duì)象集合的示意圖;圖4是User k擁有的鎖權(quán)限的示意圖;圖5是特殊情況的示意圖。
具體實(shí)施例方式
在實(shí)施基于internet(因特網(wǎng))的分布式圖案協(xié)同設(shè)計(jì)的復(fù)雜加鎖方法時(shí),具體方式如下1)用戶設(shè)計(jì)圖案過(guò)程中,對(duì)象與設(shè)計(jì)區(qū)域存在以下關(guān)系定義1半包圍鎖定給定一個(gè)對(duì)象和一個(gè)區(qū)域鎖,當(dāng)區(qū)域鎖的輪廓包圍對(duì)象的一部分時(shí)(如圖1所示),對(duì)象與區(qū)域鎖二者共同所處的狀態(tài)稱作半包圍鎖定;
定義2全包圍鎖定給定一個(gè)對(duì)象和一個(gè)區(qū)域鎖,當(dāng)區(qū)域鎖的輪廓包圍對(duì)象的全部時(shí)(如圖2),對(duì)象與區(qū)域鎖二者共同所處的狀態(tài)稱作全包圍鎖定;定義3相關(guān)包圍鎖定當(dāng)用戶鎖定一個(gè)區(qū)域時(shí),用戶不但同時(shí)鎖定處于全包圍鎖定狀態(tài)的對(duì)象,并且也同時(shí)鎖定處于半包圍鎖定狀態(tài)的對(duì)象,而不是只鎖定其一部分;這樣的鎖定稱作相關(guān)包圍鎖定;定義4相關(guān)包圍對(duì)象集合REOS給定一個(gè)用戶的區(qū)域鎖,所有與該區(qū)域鎖處于相關(guān)包圍鎖定狀態(tài)的對(duì)象都屬于REOS;例如,圖3中區(qū)域鎖Lockregion1的相關(guān)包圍對(duì)象集合是{Objecta,Objectb,Objectc},其中Objecta是處于全包圍鎖定狀態(tài)的對(duì)象,Objectb,Objectc是處于半包圍鎖定狀態(tài)的對(duì)象。
2)圖案設(shè)計(jì)用戶User K擁有的鎖權(quán)限是一個(gè)二元組{LockSetkregion,LockSetkobject},其中LockSetkregion是User k擁有的區(qū)域鎖集合,該集合中的每一個(gè)元素由兩部分組成,其一是User k擁有的區(qū)域本身,其二是該區(qū)域的相關(guān)包圍對(duì)象集合REOS;LockSetkregion的表示形式如下{[Region1k,REOSregion1k(Object11k,Object12k,Object13k...)],[Region2k,REOSregion2k(Object21k,Object22k,Object23k...)]...}]]>每一項(xiàng)的上標(biāo)表示這個(gè)區(qū)域或?qū)ο蟮乃姓?;LockSetkobject是用戶可k(User k)擁有的獨(dú)立對(duì)象鎖集合,這里的獨(dú)立對(duì)象鎖所指的是這個(gè)對(duì)象鎖不屬于任何一個(gè)區(qū)域鎖;例如,在圖4中,用戶A(User A)擁有以下對(duì)象和區(qū)域的鎖權(quán)限,其中LockSetAregion是{[Region1A,REOSregion1A(ObjectaA,ObjectbA,ObjectcA)]},LockSetAobject是{ObjectdA}。
3)重復(fù)鎖定的處理方法a.當(dāng)用戶鎖定一個(gè)對(duì)象之后又鎖定一個(gè)區(qū)域,而這個(gè)區(qū)域全包圍或半包圍這個(gè)鎖定的對(duì)象系統(tǒng)將提示用戶是否把該對(duì)象的鎖權(quán)限加入該區(qū)域;b.當(dāng)用戶鎖定一個(gè)區(qū)域之后又鎖定另一個(gè)區(qū)域,而這兩個(gè)區(qū)域是有重疊的部分允許同一用戶鎖定重疊的區(qū)域;
c.當(dāng)用戶鎖定一個(gè)區(qū)域及其對(duì)象,之后用戶釋放了其中一些對(duì)象,一段時(shí)間后用戶又試圖對(duì)它們加鎖系統(tǒng)將提示用戶或者把該對(duì)象的鎖權(quán)限加入該區(qū)域,或者獨(dú)立為一個(gè)對(duì)象鎖;d.當(dāng)用戶鎖定一個(gè)對(duì)象之后又鎖定該對(duì)象忽略鎖定;e.當(dāng)用戶鎖定一個(gè)區(qū)域之后又鎖定該區(qū)域忽略鎖定;4)限制用戶操作的處理方法a.當(dāng)一用戶鎖定一個(gè)對(duì)象其他用戶不可以對(duì)該對(duì)象進(jìn)行編輯操作;b.當(dāng)一用戶鎖定一個(gè)區(qū)域其他用戶不可以移動(dòng)對(duì)象進(jìn)入該區(qū)域,其他用戶新建的對(duì)象與該區(qū)域不能處于的半包圍鎖定或全包圍鎖定狀態(tài);其他用戶不可以對(duì)區(qū)域鎖定的對(duì)象進(jìn)行編輯操作;其他用戶鎖定的區(qū)域不可以與該區(qū)域有相交的部分;5)特殊情況的處理方法用戶鎖定一個(gè)區(qū)域,不但鎖定了區(qū)域本身,也鎖定了區(qū)域中的對(duì)象。這是一種整體鎖定的形式。但這種整體鎖定會(huì)給其他用戶帶來(lái)不必要的阻礙,如果在區(qū)域鎖中可以釋放對(duì)象的鎖權(quán)限,將有效的融通不同用戶之間的請(qǐng)求。
a)存在這樣一種情況,如圖4,用戶A的區(qū)域鎖鎖定一系列對(duì)象,用戶B此時(shí)試圖編輯這一系列對(duì)象中的單個(gè)對(duì)象Objecta;A可以只釋放Objecta的權(quán)限。
釋放后,用戶A的LockSetAregion是{[Region1A,REOSregion1A(ObjectbA,ObjectcA)]},A的LockSetAobject是{ObjectbA}。
假設(shè)用戶B在此之前沒(méi)有擁有任何鎖權(quán)限,此時(shí)用戶B的LockSetBregion是{},B的LockSetBobject是{ObjectaB},Objecta的上標(biāo)由A變?yōu)锽表示Objecta的所有者以及由A變成B。
但是,當(dāng)B真正操作(如改變大小,移動(dòng))Objecta的時(shí)候,根據(jù)限制用戶操作的處理方法,無(wú)論B是否對(duì)Objecta加鎖,B的操作由于入侵A的區(qū)域?qū)⒈幌拗撇僮鳌?br>
針對(duì)這種情況,采用伙伴協(xié)議I使Objecta成為A的伙伴,允許Objecta在A的區(qū)域里自由出入。在A的區(qū)域鎖的屬性里面存放一張伙伴列表BuddyList,當(dāng)Objecta的權(quán)限從A移交到B的時(shí)候,把Objecta加入BuddyList。B操作Objecta的時(shí)候,當(dāng)檢測(cè)到操作與現(xiàn)存的區(qū)域鎖沖突,就在區(qū)域鎖的BuddyList里查找是否有Objecta,如果有,操作被允許。
b)存在另一種情況,用戶A的區(qū)域鎖已經(jīng)鎖定一系列對(duì)象(包括Objecta),用戶B此時(shí)試圖鎖定另一個(gè)區(qū)域,而這個(gè)區(qū)域與Objecta處于相關(guān)包圍鎖定狀態(tài),如圖5。
處理方式是Objecta的鎖權(quán)限歸屬于A。但當(dāng)A操作Objecta移動(dòng)時(shí),根據(jù)限制用戶操作的處理方法,必然會(huì)觸犯到B的區(qū)域,被限制操作。但由于A是當(dāng)前對(duì)Objecta加鎖的用戶,采取允許A操作Objecta在B中移動(dòng)的方式。
針對(duì)這種情況,采用伙伴協(xié)議II在伙伴協(xié)議I的基礎(chǔ)上(即令Objecta成為B的Buddy)加入對(duì)Objecta的可等待機(jī)制。由于其他用戶對(duì)于被A鎖定的Objecta是處于等待鎖定狀態(tài),當(dāng)A釋放鎖的時(shí)候,有必要把Objecta的鎖權(quán)限交給下一個(gè)申請(qǐng)Objecta的鎖權(quán)限的用戶。
權(quán)利要求
1.一種圖案協(xié)同設(shè)計(jì)中的復(fù)雜加鎖方法,其特征在于1)用戶設(shè)計(jì)圖案過(guò)程中,圖形對(duì)象與設(shè)計(jì)區(qū)域存在以下關(guān)系定義1半包圍鎖定給定一個(gè)圖形對(duì)象和一個(gè)區(qū)域鎖,當(dāng)區(qū)域鎖的輪廓包圍對(duì)象的一部分時(shí),圖形對(duì)象與區(qū)域鎖二者共同所處的狀態(tài)稱作半包圍鎖定;定義2全包圍鎖定給定一個(gè)圖形對(duì)象和一個(gè)區(qū)域鎖,當(dāng)區(qū)域鎖的輪廓包圍對(duì)象的全部時(shí),圖形對(duì)象與區(qū)域鎖二者共同所處的狀態(tài)稱作全包圍鎖定;定義3相關(guān)包圍鎖定當(dāng)用戶鎖定一個(gè)區(qū)域時(shí),用戶不但同時(shí)鎖定處于全包圍鎖定狀態(tài)的對(duì)象,并且也同時(shí)鎖定處于半包圍鎖定狀態(tài)的對(duì)象,而不是只鎖定其一部分;這樣的鎖定稱作相關(guān)包圍鎖定;定義4相關(guān)包圍對(duì)象集合REOS給定一個(gè)用戶的區(qū)域鎖,所有與該區(qū)域鎖處于相關(guān)包圍鎖定狀態(tài)的圖形對(duì)象都屬于REOS;2)圖案設(shè)計(jì)用戶User K擁有的鎖權(quán)限是一個(gè)二元組{LockSetkregion,LockSetkobject},其中LockSetkregion是User k擁有的區(qū)域鎖集合,該集合中的每一個(gè)元素由兩部分組成,其一是User k擁有的區(qū)域本身,其二是該區(qū)域的相關(guān)包圍對(duì)象集合REOS;LockSetkregion的表示形式如下{[Region1k,REOSregion1k(Object11k,Object12k,Object13k...)],[Region2k,REOSregion2k(Object21k,Object22k,Object23k...)]...}每一項(xiàng)的上標(biāo)表示這個(gè)區(qū)域或?qū)ο蟮乃姓?;LockSetkobject是User k擁有的獨(dú)立對(duì)象鎖集合,這里的獨(dú)立對(duì)象鎖所指的是這個(gè)對(duì)象鎖不屬于任何一個(gè)區(qū)域鎖;3)重復(fù)鎖定的處理方法a.當(dāng)用戶鎖定一個(gè)對(duì)象之后又鎖定一個(gè)區(qū)域,而這個(gè)區(qū)域全包圍或半包圍這個(gè)鎖定的對(duì)象系統(tǒng)將提示用戶是否把該對(duì)象的鎖權(quán)限加入該區(qū)域;b.當(dāng)用戶鎖定一個(gè)區(qū)域之后又鎖定另一個(gè)區(qū)域,而這兩個(gè)區(qū)域是有重疊的部分允許同一用戶鎖定重疊的區(qū)域;c.當(dāng)用戶鎖定一個(gè)區(qū)域及其對(duì)象,之后用戶釋放了其中一些對(duì)象,一段時(shí)間后用戶又試圖對(duì)它們加鎖系統(tǒng)將提示用戶或者把該對(duì)象的鎖權(quán)限加入該區(qū)域,或者獨(dú)立為一個(gè)對(duì)象鎖;d.當(dāng)用戶鎖定一個(gè)對(duì)象之后又鎖定該對(duì)象忽略第二次鎖定;e.當(dāng)用戶鎖定一個(gè)區(qū)域之后又鎖定該區(qū)域忽略第二次鎖定;4)限制用戶操作的處理方法a.當(dāng)一用戶鎖定一個(gè)對(duì)象其他用戶不可以對(duì)該對(duì)象進(jìn)行編輯操作;b.當(dāng)一用戶鎖定一個(gè)區(qū)域其他用戶不可以移動(dòng)對(duì)象進(jìn)入該區(qū)域,其他用戶新建的對(duì)象與該區(qū)域不能處于的半包圍鎖定或全包圍鎖定狀態(tài);其他用戶不可以對(duì)區(qū)域鎖定的對(duì)象進(jìn)行編輯操作;其他用戶鎖定的區(qū)域不可以與該區(qū)域有相交的部分;5)特殊情況的處理方法存在這樣一種情況,用戶A的區(qū)域鎖鎖定一系列對(duì)象,用戶B此時(shí)試圖編輯這一系列對(duì)象中的單個(gè)對(duì)象Objecta;A可以只釋放Objecta的權(quán)限;存在另一種情況,用戶A的區(qū)域鎖已經(jīng)鎖定一系列對(duì)象(包括Objecta),用戶B此時(shí)試圖鎖定另一個(gè)區(qū)域,而這個(gè)區(qū)域與Objecta處于相關(guān)包圍鎖定狀態(tài),采取處理是Objecta的鎖權(quán)限歸屬于A,允許A操作Objecta在B中移動(dòng)的方式;加入B對(duì)Objecta的可等待機(jī)制。
全文摘要
本發(fā)明公開了一種圖案協(xié)同設(shè)計(jì)中的復(fù)雜加鎖方法。在分布式協(xié)同編輯系統(tǒng)中,為了防止并行操作中出現(xiàn)沖突,常常用到加鎖的機(jī)制。本發(fā)明是一種不但能夠給對(duì)象加鎖,而且能夠給區(qū)域加鎖的加鎖方法。在這種加鎖方法下,用戶可以自由的選擇給一個(gè)圖案對(duì)象加鎖或者給一個(gè)工作區(qū)域加鎖。這是一種細(xì)粒度和粗粒度的結(jié)合,既有利于減少加鎖時(shí)系統(tǒng)的負(fù)載,又有利于方便用戶的操作。
文檔編號(hào)G06F9/46GK1741022SQ20051006079
公開日2006年3月1日 申請(qǐng)日期2005年9月16日 優(yōu)先權(quán)日2005年9月16日
發(fā)明者陳純, 卜佳俊, 楊建旭, 姜波 申請(qǐng)人:浙江大學(xué)