(57)【要約】  ロック制御装置（２０）は、タスクによる共用資源を利用するためのロックの取得を許可するか否かを示す非対称マトリックス（１１）に従って、タスクによるロックの取得を制御する。また、ロック制御装置（２０）は、タスクによるロックの取得要求が競合しているか否かを判別し、ロックの取得要求が競合していると判別した場合は、競合発生時におけるロックの取得を許可するか否かを示す一時マトリックス（１３）に従って、ロックの取得を制御する。
2012114516.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクが共用する共用資源を利用するためのロックの取得を前記タスクに許可するか否かを示す第１のロック情報に従って、前記タスクによるロックの取得を制御する制御部と、
前記タスクによるロックの取得要求が競合しているか否かを判別する判別部と
を有し、
前記制御部は、前記判別部により前記ロックの取得要求が競合していると判別された場合には、競合発生時におけるロックの取得を許可するか否かを示す第２のロック情報に従って、前記タスクによるロックの取得を制御することを特徴とするロック制御装置。
【請求項２】
前記制御部は、現在取得されているロックの状態が、当該ロックを取得したタスク以外にも共用資源の参照を認める共用状態である際に、ロックを取得したタスクのみが共用資源を利用することができる排他状態でのロックの取得を他のタスクが要求した場合には、当該他のタスクに前記排他状態でのロックの取得を許可するとともに、前記共用状態でロックを取得したタスクがロックを解放するまでの間、前記他のタスクによる共用資源の利用を待機させることを示す前記第１のロック情報に従うことを特徴とするロック制御装置。
【請求項３】
前記制御部は、現在取得されているロックの状態が前記排他状態である際に、他のタスクが前記共用状態でのロックの取得を要求した場合には、前記取得されているロックの状態を前記排他状態に保ったまま、前記他のタスクによる前記共用資源の参照を許可することを示す前記第２のロック情報に従うことを特徴とする請求項１に記載のロック制御装置。
【請求項４】
前記判別部は、前記共用状態でロックを取得したタスクが、所定の時間が経過するまでの間、前記排他状態でロックを取得したタスクによるロックの解放を待機した場合には、競合が発生したと判別することを特徴とする請求項１〜３のいずれか１つに記載のロック制御装置。
【請求項５】
前記判別部は、前記ロックの状態が共用状態である際に前記排他状態でロックを取得したタスクが存在し、かつ、前記共用状態のロックを取得したタスクが再度共用状態でロックの取得を要求した場合には、競合が発生したと判別することを特徴とする請求項１〜３のいずれか１つに記載のロック制御装置。
【請求項６】
前記判別部は、前記ロックの状態が共用状態である際に前記排他状態でロックを取得したタスクが存在する際に、新たなタスクが前記共用状態によるロックの取得を要求した場合には、当該新たなタスクが他にも前記共用状態でロックを取得しているか否かを判別し、ロックを取得していると判別した場合には、競合が発生したと判別することを特徴とする請求項１〜３のいずれか１つに記載のロック制御装置。
【請求項７】
タスクを実行する情報処理装置によって実行されるロック制御プログラムであって、
複数のタスクが共用する共用資源を利用するためのロックの取得を前記タスクに許可するか否かを示す第１のロック情報に従って、前記タスクによるロックの取得を制御し、
前記タスクによるロックの取得要求が競合しているか否かを判別し、
前記ロックの取得要求が競合していると判別した場合には、競合発生時におけるロックの取得を許可するか否かを示す第２のロック情報に従って、前記タスクによるロックの取得を制御することを特徴とするロック制御プログラム。
【請求項８】
タスクを実行する情報処理装置によって実行されるロック制御方法であって、
複数のタスクが共用する共用資源を利用するためのロックの取得を前記タスクに許可するか否かを示す第１のロック情報に従って、前記タスクによるロックの取得を制御し、
前記タスクによるロックの取得要求が競合しているか否かを判別し、
前記ロックの取得要求が競合していると判別した場合には、競合発生時におけるロックの取得を許可するか否かを示す第２のロック情報に従って、前記タスクによるロックの取得を制御することを特徴とするロック制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ロック制御装置、ロック制御プログラムおよびロック制御方法に関する。
【背景技術】
【０００２】
従来、タスクがメモリやＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等の共用資源を利用するためのロック機構が知られている。このようなロック機構の一例として、ロックを取得したタスクのみが共用資源を利用する「排他モード」、または、他のタスクにも共用資源の参照を認める「共用モード」でタスクがロックを取得する技術が知られている。【０００３】
このようなタスクは、新たにロックを取得する場合には、共用資源を利用中の他のタスクが取得したロックのモードと、自身が新たに取得しようとするロックのモードとの組み合わせに応じて、共用資源のロックを取得する。具体的には、タスクは、現在のロックのモードと新たなモードとの組み合わせにロック取得の可否を対応付けたマトリックスに従って、共用資源のロックを取得する。その後、タスクは、共用資源の利用を終えた場合には、ロックを解放する。【０００４】
図１６は、共用資源のロック取得の可否を示すマトリックスを説明するための図である。ここで、図１６中の「Ｙ」とは、ロックを取得できる旨を示し、「Ｎ」とは、ロックを取得できない旨を示す。例えば、タスクは、自身が新たに取得しようとするロックのモードと、他のタスクが取得した現在のロックのモードとの組み合わせが、図１６に示すマトリックスの「Ｎ」となる組み合わせである場合には、ロックを取得している他のタスクによるロックの解放まで待機する。そして、タスクは、ロックが解放され、モードの組み合わせがマトリックスの「Ｙ」となる組み合わせとなった場合には、新たなモードでロックを取得する。【０００５】
ここで、図１６に示すようなマトリックスを用いて共用資源を利用する場合には、新たに「排他モード」でロックを取得しようとしたタスクが有限な時間内でロックを取得できない場合がある。例えば、あるタスクＡは、自身がロックを「排他モード」で取得しようとした際に、タスクＢが「共用モード」でロックを取得していた場合には、モードの組み合わせが図１６に示すマトリックス上「Ｎ」となるので、タスクＢがロックを解放するまで待機する。【０００６】
ここで、タスクＢがロックを解放する前に、別のタスクＢ２がロックを「共用モード」で取得しようとした場合には、モードの組み合わせがマトリックス上「Ｙ」となるので、タスクＡより先にタスクＢ２が「共用モード」でロックを取得する。このような「共用モード」でロックを取得しようとするタスクが発生し続けた場合には、「排他モード」でロックを取得しようとするタスクＡがロックを有限な時間内に取得できず、待機し続けてしまう。【０００７】
このため、現在のロックのモードが「共用モード」である際に、新たなタスクが「排他モード」でロックを取得しようとした場合には、新たなタスクに「排他モード」でロックを取得させる技術が知られている。このような技術では、現在のモードが「共用モード」である場合に、新たに「排他モード」でロックを取得しようとするタスクに対して、ロックを「排他モード」で取得することが認められる。そして、「排他モード」でロックを取得したタスクは、「共用モード」でロックを取得したタスクがロックを解放するまで共用資源を利用せずに待機する。【０００８】
そして、「排他モード」でロックを取得したタスクは、「共用モード」でロックを取得した他のタスクがロックを解放した場合には、共用資源を利用する。このような処理によって、「排他モード」でロックを取得しようとするタスクは、後に発生した「共用モード」でロックを取得しようとするタスクによるロックの取得を防ぎ、有限な時間内に共用資源を利用する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特許第２８９８０１２号公報
【特許文献２】特開平０３−０８３１４２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、現在のロックが「共用モード」である際に「排他モード」でのロック取得を認める技術では、同一のタスクが重複してロックを取得することができる場合には、デッドロックが発生してしまうという問題があった。【００１１】
図１７は、デッドロックの発生を説明するための図である。図１７に示す例では、タスク３０とタスク３１によるロックの取得処理について、上方向から下方向に向かって処理が進むものとする。図１７中（Ａ）に示すように、タスク３０は、ロックのモードが「解放状態」である際に、ロックを「共用モード」で取得しようとした場合には、図１７中（Ｂ）に示すように、ロックを「共用モード」で取得する。【００１２】
次に、図１７中（Ｃ）に示すように、タスク３１は、タスク３０がロックを「共用モード」で取得している際に、自身が「排他モード」でロックを取得しようとした場合には、図１７中（Ｄ）に示すように、「排他モード」でロックを取得する。また、タスク３１は、共用資源の利用を行わずに、タスク３０によるロックの解放を待つ。【００１３】
ここで、図１７中（Ｅ）に示すように、タスク３０が「共用モード」でロックを重複して取得しようとした場合には、現在のロックのモードが「排他モード」であるので、図１７中（Ｆ）に示すように、タスク３０はタスク３１によるロックの解放を待つ。この結果、タスク３０がタスク３１によるロックの解放待ちとなり、タスク３１がタスク３０によるロックの解放待ちとなるので、図１７中（Ｇ）に示すようにタスク３０とタスク３１との処理が進まず、デッドロックが発生してしまう。【００１４】
なお、このようなデッドロックの発生を防止するため、同一のタスクによる重複したロックの取得を禁止する手法が考えられる。しかし、同一のタスクによる重複したロックの取得が行えない場合には、各タスクが取得したロックのモードを記憶し、重複したロックの取得を省略する論理を各タスクに組み込むため、実装が煩雑になる。また、各タスクは、それぞれ別々に開発されることが多いため、同一のタスクによる重複したロックの取得の回避を徹底することが困難である。【００１５】
本願に開示の技術は、上述した問題に鑑みてなされたものであって、デッドロックを回避する。
【課題を解決するための手段】
【００１６】
一つの側面では、タスクによる共用資源を利用するためのロックの取得を許可するか否かを示す第１のロック情報に従って、タスクによるロックの取得を制御するロック制御装置である。また、ロック制御装置は、タスクによるロックの取得要求が競合しているか否かを判別し、ロックの取得要求が競合していると判別した場合は、競合発生時におけるロックの取得を許可するか否かを示す第２のロック情報に従って、ロックの取得を制御する。
【発明の効果】
【００１７】
一つの側面では、デッドロックを回避する。
【図面の簡単な説明】
【００１８】
【図１】図１は、実施例１に係るリソース管理装置を説明するための図である。
【図２】図２は、非対称マトリックスの一例を説明するための図である。
【図３】図３は、一時マトリックスの一例を説明するための図である。
【図４】図４は、ロック管理情報の一例を説明するための図である。
【図５】図５は、ロックのモードの遷移を説明するための図である。
【図６】図６は、実施例１に関わるロック要求処理部が実行する処理の流れを説明するための図である。
【図７】図７は、実施例１に関わる競合判定部が実行する処理の流れの一例を説明するための図である。
【図８】図８は、実施例１に関わるロック解放処理部が実行する処理の流れの一例を説明するための図である。
【図９】図９は、実施例２に係るリソース管理装置を説明するための図である。
【図１０】図１０は、実施例２に係るロック要求処理部が実行する処理の流れを説明するためのフローチャートである。
【図１１】図１１は、実施例２に係る競合判定部が実行する競合判定処理の流れを説明するためのフローチャートである。
【図１２】図１２は、定期競合判定処理を説明するための図である。
【図１３】図１３は、競合が発生したか否かを判別するための処理の一例を説明するためのフローチャート（１）である。
【図１４】図１４は、競合が発生したか否かを判別するための処理の一例を説明するためのフローチャート（２）である。
【図１５】図１５は、ロック制御プログラムを実行するコンピュータの一例を説明するための図である。
【図１６】図１６は、共用資源のロック取得の可否を示すマトリックスを説明するための図である。
【図１７】図１７は、デッドロックの発生を説明するための図である。
【発明を実施するための形態】
【００１９】
以下に添付図面を参照して本願に係るロック制御装置、ロック制御プログラムおよびロック制御方法について説明する。
【実施例１】
【００２０】
以下の実施例１では、図１を用いて、ロック制御装置を有するリソース管理装置の一例を説明する。図１は、実施例１に係るリソース管理装置を説明するための図である。なお、リソース管理装置１は、複数のタスクが共用する複数の共用リソースの管理を行う管理装置である。【００２１】
図１に示すように、リソース管理装置１は、非対称マトリックス記憶部１０、一時マトリックス記憶部１２、ロック管理情報記憶部１４、ロック制御装置２０を有する。また、非対称マトリックス記憶部１０は、非対称マトリックス１１を有し、一時マトリックス記憶部１２は、一時マトリックス１３を有する。また、ロック管理情報記憶部１４は、ロック管理情報１５を有する。また、ロック制御装置２０は、ロック要求処理部２１、競合判定部２２、ロック解放処理部２３を有する。【００２２】
非対称マトリックス記憶部１０は、共用リソースを利用するためのタスクによるロックの取得を許可するか否かを示す非対称マトリックス１１を有する。具体的には、非対称マトリックス記憶部１０は、あるタスクが現在取得しているロックのモードと新たにタスクが取得を要求したロックのモードとの組にロック取得の可否を対応付けたマトリックスである非対称マトリックス１１を有する。【００２３】
図２は、非対称マトリックスの一例を説明するための図である。図２に示すように、非対称マトリックス１１は、各行に現在取得されているロックのモードが割当てられており、各列に新たにタスクが取得を要求したロックのモードが割当てられている。【００２４】
ここで、図２中の「排他モード」とは、ロックを取得したタスクのみがリソースを利用するロックのモードであり、「共用モード」とは、ロックを取得したタスク以外にも共用リソースの参照を認めるロックのモードである。なお、図２中の「解放状態」とは、ロックを取得していたタスクがリソースのロックを解放した際に、同じリソースのロックを取得しているタスクが他に存在していない状態を示す。なお、ロックを解放できるのは、解放するロックを取得したタスクのみである。【００２５】
また、図２中の「Ｎ」は、新たなタスクによるロックの取得を許可しない旨を示し、「Ｙ」は、ロックの取得を要求したタスクによるロックの取得を許可する旨を示す。また、図２中の「Ｙ（待ち）」は、ロックの取得を要求したタスクによるロックの取得を認めるとともに、現在ロックを取得しているタスクがロックを解放するまでロックの取得を要求したタスクによる共用リソースの利用または参照を待機させる旨を示す。【００２６】
つまり、図２に示す例では、非対称マトリックス１１は、あるタスクが現在取得しているロックのモードが「排他モード」である際に、他のタスクが取得を要求したロックのモードが「排他モード」である場合には、ロック取得を要求したタスクによるロックの取得を許可しない旨を示す。また、非対称マトリックス１１は、あるタスクが現在取得しているロックのモードが「排他モード」である際に、他のタスクが取得を要求したロックのモードが「共用モード」である場合には、ロック取得を要求したタスクによるロックの取得を許可しない旨を示す。また、非対称マトリックス１１は、あるタスクが現在取得しているロックのモードが「共用モード」である場合には、他のタスクが取得を要求したロックのモードに係らず、ロック取得を要求したタスクにロックの取得を許可する旨を示す。【００２７】
ただし、非対称マトリックス１１は、あるタスクが現在取得しているロックのモードが「共用モード」である際に、他のタスクが取得を要求したロックのモードが「排他モード」である場合には、以下の制約をタスクに課す旨を示す。すなわち、非対称マトリックス１１は、ロック取得を要求したタスクの「排他モード」によるロックの取得を許可するとともに、現在のロックを取得したタスクがロックを解放するまで、ロック取得を要求したタスクによる共用リソースの利用を待機させる旨を示す。【００２８】
図１に戻って、一時マトリックス記憶部１２は、共用リソースに対するロック取得の要求が競合している際にロックの取得を許可するか否かを示す一時マトリックス１３を有する。ここで、ここで、競合とは、以下の状態を示す。すなわち、あるタスクが「共用モード」でのロックの取得を要求し、他のタスクが「排他モード」でのロックの取得を要求し、その後、「共用モード」でロックの取得を要求したタスクが、「共用モード」で重複するロックの取得を再度要求した状態を言う。【００２９】
具体的には、一時マトリックス記憶部１２は、非対称マトリックス１１と同様に、あるタスクが現在取得しているロックのモードと他のタスクが新たに取得を要求したロックのモードとの組にロック取得の可否を対応付けた一時マトリックス１３を有する。【００３０】
図３は、一時マトリックスの一例を説明するための図である。なお、図３中「Ｙ（排他モードのまま）」とは、新たなタスクによるロック取得を許可するとともに、現在取得されているロックのモードを「排他モード」に保持する旨を示す。つまり、一時マトリックス１３は、「排他モード」でロックを取得したタスクを待機させたまま、「共用モード」でロックの取得を要求したタスクに共用リソースの閲覧を認める旨を示す。【００３１】
図３に示すように、一時マトリックス１３は、あるタスクが現在取得しているロックのモードが「排他モード」であり、他のタスクが取得を要求したモードが「排他モード」である場合には、ロック取得を要求したタスクにロック取得を許可しない旨を示す。また、一時マトリックス１３は、あるタスクが現在取得しているロックのモードが「排他モード」であり、タスクが取得を要求したロックのモードが「共用モード」である場合には、ロック取得を要求したタスクに「共用モード」でのロック取得を許可する旨を示す。【００３２】
ただし、一時マトリックス１３は、あるタスクが現在取得しているロックのモードが「排他モード」であり、タスクが取得を要求したロックのモードが「共用モード」である場合には、以下の制約をタスクに課す旨を示す。すなわち、一時マトリックス１３は、あるタスクが現在取得しているロックのモードを「排他モード」に保ったまま、ロックの取得を要求したタスクに「共用モード」でのロックの取得を許可する旨を示す情報を有する。つまり、一時マトリックス１３は、ロックの取得を要求したタスクに、共用リソースの参照を許可する旨を示す情報を有する。【００３３】
図１に戻って、ロック管理情報記憶部１４は、リソース管理装置１が管理する共用リソースに係る現在のロックの状態を示すロック管理情報１５を有する。図４は、ロック管理情報の一例を説明するための図である。図４に示す例では、ロック管理情報１５は、ロックの状態を示す情報として、「ロックのモード」、「ロック取得待ちキュー」、「ロック取得済みキュー」、「ロック解放待ちキュー」を有する。なお、ロック管理情報記憶部１４は、リソース管理装置１が管理する各共用リソースについて、それぞれ個別にロック管理情報１５と同様の情報を有する。【００３４】
ここで、「ロックのモード」とは、ロック管理情報１５に対応する共用リソースについて、あるタスクが現在取得しているロックのモードが「排他モード」であるか「共用モード」であるか「解放状態」であるかを示す。つまり、「ロックのモード」とは、対応する共用リソースについて、現在取得されているロックのモードを示す情報である。また、「ロック取得待ちキュー」とは、対応する共用リソースのロックの取得を待機しているタスクを示す情報である。また、「ロック取得済みキュー」とは、対応する共用リソースのロックを取得しているタスクを示す情報である。また、「ロック解放待ちキュー」とは、対応する共用リソースについて取得されたロックを解放するのを待機しているタスクを示す情報である。【００３５】
例えば、図４に示す例では、ロック管理情報１５は、あるタスクが現在取得しているロックのモードが「排他モード」であることを示す。また、ロック管理情報１５は、「ロック取得待ちキュー」に情報を格納しておらず、ロック取得済みキューに「タスク４」を示す情報と「タスク３」を示す情報とを有する。また、ロック管理情報１５は、「ロック解放待ちキュー」に「タスク３」を示す情報を有する。【００３６】
なお、ロック管理情報記憶部１４は、各共用リソースごとにロック管理情報１５と同様のロック管理情報を有する。以下の説明では、ロック管理情報１５に関わる共用リソースに対するロックの取得を各タスク２〜４が要求するものとする。【００３７】
図１に戻って、ロック制御装置２０は、非対称マトリックス１１に従って、各タスク２〜４によるロックの取得を制御する。また、ロック制御装置２０は、各タスク２〜４によるロック取得の要求が競合しているか否かを判別し、競合していると判別した場合には、一時マトリックス１３に従って、ロックの取得を制御する。【００３８】
以下、ロック制御装置２０が有するロック要求処理部２１、競合判定部２２、ロック解放処理部２３について説明する。ロック要求処理部２１は、非対称マトリックス記憶部１０に記憶された非対称マトリックス１１に従って、各タスク２〜４によるロックの取得を制御する。また、ロック要求処理部２１は、競合判定部２２によって競合が発生していると判定された場合には、一時マトリックス１３に従って、各タスク２〜４によるロックの取得を制御する。【００３９】
具体的には、ロック要求処理部２１は、タスク２〜４がロックの取得を要求した場合には、取得を要求されたロックのモードが「共用モード」であるか否かを判別する。そして、ロック要求処理部２１は、要求されたロックのモードが「共用モード」ではない場合には、非対称マトリックス１１に従って、要求されたロックのモードとロック管理情報１５の「ロックのモード」とに応じたロック取得の可否を判別する。【００４０】
一方、ロック要求処理部２１は、要求されたロックのモードが「共用モード」である場合には、競合判定部２２の呼び出しを行い、競合が発生しているか否かを判定させる。そして、ロック要求処理部２１は、競合判定部２２から競合が発生していると通知された場合には、一時マトリックス１３に従って、要求されたロックのモードとロック管理情報１５の「ロックのモード」とに応じたロック取得の可否を判別する。また、ロック要求処理部２１は、競合判定部２２から競合が発生していないと通知された場合には、非対称マトリックス１１に従って、ロック取得の可否を判別する。【００４１】
ここで、ロック要求処理部２１は、ロック取得の可否を判別する場合には、ロック管理情報１５の「ロックのモード」を、あるタスクが現在取得しているロックのモードとして判別する。また、ロック要求処理部２１は、判別したロックのモードと要求されたロックのモードとの組に対応付けられたロック取得の可否を、非対称マトリックス１１または一時マトリックス１３から参照する。そして、ロック要求処理部２１は、参照した結果が「Ｎ」であった場合には、ロック取得を要求したタスクを待ち状態にし、タスクをロック管理情報１５の「ロック取得待ちキュー」の最後尾に繋ぐ。【００４２】
一方、ロック要求処理部２１は、参照した結果が「Ｙ」である場合には、ロック管理情報１５の「ロックのモード」を要求されたロックのモードに変更する。また、ロック要求処理部２１は、ロックの取得を要求したタスクをロック管理情報１５が有する「ロック取得済みキュー」の最後尾に繋ぐ。【００４３】
また、ロック要求処理部２１は、参照した結果が「Ｙ（待ち）」である場合は、新たにロック取得を要求したタスクを待ち状態にするととともに、新たにロック取得を要求したタスクをロック管理情報１５が有する「ロック解放待ちキュー」の最後尾に繋ぐ。さらに、ロック要求処理部２１は、ロック管理情報１５の「ロックのモード」を新たにロック取得を要求したタスクから要求されたロックのモードに変更する。【００４４】
また、ロック要求処理部２１は、参照した結果が「Ｙ（排他モードのまま）」である場合は、ロック管理情報１５の「ロックのモード」を変更せずに、新たにロック取得を要求したタスクをロック管理情報１５が有する「ロック取得済みキュー」の最後尾に繋ぐ。つまり、ロック要求処理部２１は、新たにロック取得を要求したタスクに対して、共用モードによるロックを取得させる一方で、ロック管理情報１５の「ロックのモード」については、変更を行わず、排他モードを保持させる。【００４５】
このように、ロック要求処理部２１は、あるタスクが現在取得しているロックのモードが「共用モード」である際に、新たなタスクが「排他モード」でのロックの取得を要求した場合には、新たなタスクに「排他モード」でのロックを取得させる。また、ロック要求処理部２１は、「共用モード」でロックを取得したタスクがロックを解放するまで、新たなタスクによる共用リソースの利用を待機させる。【００４６】
また、ロック要求処理部２１は、あるタスクが現在取得しているロックのモードが「排他モード」である際に、既に「共用モード」でロックを取得したタスクが「共用モード」で重複したロックの取得を要求した場合には、競合判定部２２に競合の有無を判定させる。そして、ロック要求処理部２１は、競合判定部２２によって競合が発生していると判定された場合には、ロックのモードを「排他モード」に保ったまま、重複したロックの取得を要求したタスクに共用リソースの参照を許可する。つまり、ロック要求処理部２１は、ロック管理情報１５の「ロックのモード」を変更することなく、重複したロックの取得を要求したタスクに「共用モード」でのロック取得を許可する。【００４７】
競合判定部２２は、各タスク２〜４によるロック取得の要求が競合しているか否かを判定する。具体的には、競合判定部２２は、あるタスクが「共用モード」でロックを取得した際に「排他モード」でロックを取得して待機しているタスクが存在し、「共用モード」でロックを取得していたタスクが再度「共用モード」でロックの取得を要求した場合には、競合が発生したと判定する。【００４８】
詳細には、競合判定部２２は、ロック要求処理部２１から機能を呼び出された場合には、ロック管理情報１５の「ロックのモード」が「排他モード」であるか否かを判別する。また、競合判定部２２は、ロック管理情報１５の「ロックのモード」が「排他モード」である場合には、ロック管理情報１５の「ロック解放待ちキュー」にタスクが繋がっているか否かを判別する。また、競合判定部２２は、ロック管理情報１５の「ロック解放待ちキュー」にタスクが繋がっていた場合には、新たにロックの取得を要求したタスクがロック管理情報１５の「ロック取得済みキュー」に繋がっているか否かを判別する。【００４９】
そして、競合判定部２２は、新たにロックの取得を要求したタスクがロック管理情報１５の「ロック取得済みキュー」に繋がっていた場合には、競合が発生したと判定し、競合発生の旨をロック要求処理部２１に通知する。また、競合判定部２２は、ロック管理情報１５の「ロックのモード」が「排他モード」ではなく、ロック管理情報１５の「ロック解放待ちキュー」にタスクが繋がっていない場合には、競合が発生していないと判定し、その旨をロック要求処理部２１に通知する。また、競合判定部２２は、新たにロックの取得を要求したタスクがロック管理情報１５の「ロック取得済みキュー」に繋がっていない場合には、競合が発生していないと判定し、その旨をロック要求処理部２１に通知する。【００５０】
ロック解放処理部２３は、共用リソースの利用や参照を終えたタスクがロックを解放した場合には、ロックの解放を待っていたキューにロックを取得させる。具体的には、ロック解放処理部２３は、共用リソースの利用や参照を行っていたタスクがロックを解放した場合には、ロック管理情報１５の「ロック取得済みキュー」からロックを解放したタスクを削除する。また、ロック解放処理部２３は、ロック管理情報１５の「ロック取得済みキュー」に繋げられたタスクがまだ存在する場合には、ロック管理情報１５の「ロック取得済みキュー」に存在する全てのタスクが「ロック解放待ちキュー」に存在するか否かを判別する。【００５１】
そして、ロック解放処理部２３は、ロック管理情報１５の「ロック取得済みキュー」に存在する全てのタスクが「ロック解放待ちキュー」に存在すると判別した場合には、「ロック解放待ちキュー」のタスクの待ち状態を解放する。つまり、ロック解放処理部２３は、「ロック解放待ちキュー」に繋げられたタスクに共用リソースの利用や参照を実行させる。【００５２】
一方、ロック解放処理部２３は、ロック管理情報１５の「ロック取得済みキュー」に存在する全てのタスクが「ロック解放待ちキュー」に存在していないと判別した場合には、そのまま処理を終了する。また、ロック解放処理部２３は、ロック管理情報１５の「ロック取得済みキュー」にタスクが存在しない場合には、ロック管理情報１５の「ロックのモード」を「解放状態」に変更する。また、ロック解放処理部２３は、「ロック取得待ちキュー」に繋げられたタスクの待ち状態を解放し、タスクに対してロックの取得を再度要求させる。【００５３】
次に、ロック制御装置２０が有するロック要求処理部２１、競合判定部２２、ロック解放処理部２３が実行する処理の一例について説明する。以下の例では、タスク４が「共用モード」でロックを取得している間に、タスク３が「排他モード」でロックの取得を要求し、その後、タスク４が「共用モード」で重複したロックの取得を要求する例について説明する。【００５４】
例えば、ロック要求処理部２１は、ロック管理情報１５の「ロックのモード」が「解放状態」である際に、タスク４が「共用モード」によるロックの取得を要求した場合には、競合判定部２２を呼び出し、競合が発生しているか否かを判定させる。【００５５】
このような場合には、ロック管理情報１５の「ロックのモード」が「排他モード」ではないため、競合判定部２２は、競合が発生していないと判定し、その旨をロック要求処理部２１に通知する。【００５６】
このため、ロック要求処理部２１は、非対称マトリックス１１を参照し、現在のロックのモードである「解放状態」とタスク４が取得を要求した「共用モード」との組に対応付けられたロック取得の可否が「Ｙ」であることを判別する。そして、ロック要求処理部２１は、ロック管理情報１５の「ロックのモード」を「共用モード」に変更し、タスク４をロック管理情報１５の「ロック取得済みキュー」に繋ぐ。タスク４は、「ロック取得済みキュー」に繋がれたタスクのうち、一番最初のタスクとなるので、共用リソースの参照を行う。【００５７】
次に、ロック要求処理部２１は、タスク３が「排他モード」でロックの取得を要求した場合には、非対称マトリックス１１を参照する。そして、ロック要求処理部２１は、タスク４が現在取得しているロックのモードである「共用モード」とタスク３が要求した「排他モード」との組に対応付けられたロック取得の可否が「Ｙ（待ち）」であることを判別する。【００５８】
このため、ロック要求処理部２１は、タスク３を待ち状態にするとともに、タスク３をロック管理情報１５の「ロック解放待ちキュー」に繋ぐ。また、ロック要求処理部２１は、ロック管理情報１５の「ロックのモード」をタスク３が要求したロックのモードである「排他モード」に変更する。つまり、この時点では、ロック管理情報１５の「ロック取得済みキュー」には、１番目にタスク４が繋がっており、２番目にタスク３が繋がっている。【００５９】
次に、ロック要求処理部２１は、タスク４が「共用モード」で重複したロックの取得を要求した場合には、競合判定部２２を呼び出し、競合が発生しているか否かを判定させる。このような場合には、競合判定部２２は、ロック管理情報１５の「ロックのモード」が「排他モード」であり、かつ、「ロック解放待ちキュー」にタスク３が繋がっており、かつ、ロックの取得を要求したタスク４が「ロック取得済みキュー」に繋がっていると判別する。このため、競合判定部２２は、競合が発生していると判定し、競合が発生している旨をロック要求処理部２１に通知する。【００６０】
このため、ロック要求処理部２１は、一時マトリックス１３を参照し、ロック管理情報１５が示す「排他モード」とタスク４が取得を要求した「共用モード」との組に対応付けられたロック取得の可否が「Ｙ（排他モードのまま）」であることを判別する。このため、ロック要求処理部２１は、ロック管理情報１５の「ロック取得済みキュー」の最後尾にタスク４を繋げる。【００６１】
つまり、ロック要求処理部２１は、ロック管理情報１５の「ロックのモード」を変更せず、ロック管理情報１５の「ロック取得済みキュー」のみにタスク４を繋げる。ここで、ロック管理情報１５の「ロック取得済みキュー」には、タスク３とタスク４が繋がっているが、タスク３は、待機しているため、共用リソースの利用を行わない。【００６２】
一方、タスク４は、共用リソースの参照を行い、共用リソースの参照が終了した場合には、ロックを解放する。すると、ロック解放処理部２３は、タスク４を「ロック取得済みキュー」から削除し、「ロック解放待ちキュー」のタスク３の待ち状態を解放する。このため、タスク３は、「排他モード」で共用リソースを利用し、その後、ロックを解放する。【００６３】
図５は、ロックのモードの遷移を説明するための図である。なお、図５に示す例では、上から下に向かって、タスク４が「共用モード」でロックの取得を要求し、その後、タスク３が「排他モード」でロックの取得を要求し、さらにその後、タスク４が「共用モード」で重複したロックの取得を要求した例である。また、図５中のロックのモードとは、ロック管理情報１５の「ロックのモード」である。【００６４】
図５中（Ｈ）に示すように、タスク４が「共用モード」のロックの取得を要求する。このような場合には、ロック制御装置２０は、図５中（Ｉ）に示すように、タスク４に「共用モード」のロックを取得させる。また、ロック制御装置２０は、ロックのモードを「共用モード」に遷移させる。【００６５】
次に、図５中（Ｊ）に示すように、タスク３が「排他モード」でのロックの取得を要求する。このような場合には、ロック制御装置２０は、図５中（Ｋ）に示すように、タスク３に「排他モード」のロックを取得させるとともに、タスク４によるロックの解放まで共用リソースの利用を待機させる。また、ロック制御装置２０は、ロックのモードを「排他モード」に遷移させる。【００６６】
次に、図５中（Ｌ）に示すように、タスク４が「共用モード」での重複したロックの取得を要求する。このような場合には、ロック制御装置２０は、競合が発生したと判定し、一時マトリックス１３に従って、ロック取得の可否を判断する。この結果、ロック制御装置２０は、図５中（Ｍ）に示すように、ロックのモードを「排他モード」に保持したまま、タスク４に「共用モード」での重複したロックを取得させる。【００６７】
この結果、タスク４は、共用リソースを参照し、図５中（Ｎ）および図５中（Ｏ）に示すように、重複したロックを解放する。すると、図５中（Ｐ）に示すように、タスク３は、共用リソースを「排他モード」で利用する。その後、図５中（Ｑ）に示すように、タスク３は、共用リソースの利用を終了し、ロックを解放する。この結果、ロック制御装置２０は、ロックのモードを「解放状態」に遷移させる。【００６８】
上述したように、ロック制御装置２０は、競合が発生していない場合には、非対称マトリックス１１に従って、ロックの取得を制御し、競合が発生している場合には、一時マトリックス１３に従って、ロックの取得を制御する。このため、ロック制御装置２０は、競合が発生したことによるデッドロックを防ぐことができる。【００６９】
例えば、ロック要求処理部２１、競合判定部２２、ロック解放処理部２３とは、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ  （Field  Programmable  Gate  Array）などの集積回路、またはＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などを適用する。【００７０】
また、非対称マトリックス記憶部１０、一時マトリックス記憶部１２、ロック管理情報記憶部１４とは、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（flash  memory）などの半導体メモリ素子などの記憶装置である。【００７１】
［処理の流れ］
次に、図６〜８を用いて、ロック制御装置２０が有するロック要求処理部２１、競合判定部２２、ロック解放処理部２３が実行する処理の流れを説明する。まず、図６を用いて、ロック要求処理部２１が実行する処理の流れを説明する。図６は、実施例１に関わるロック要求処理部が実行する処理の流れを説明するための図である。ロック要求処理部２１は、タスク２〜４がロックの取得を要求したことをトリガとして、処理を開始する。【００７２】
まず、ロック要求処理部２１は、各タスク２〜４が取得を要求したロックのモードが「共用モード」であるか否かを判別する（ステップＳ１０１）。そして、ロック要求処理部２１は、各タスク２〜４が取得を要求したロックのモードが「共用モード」である場合には（ステップＳ１０１肯定）、競合判定部２２を呼び出し、競合が発生しているか否かを判定させる（ステップＳ１０２）。【００７３】
次に、ロック要求処理部２１は、競合判定部２２によって競合が発生していると判定されたか否かを判別し（ステップＳ１０３）、競合が発生している場合には、（ステップＳ１０３肯定）、一時マトリックス１３を参照する（ステップＳ１０４）。つまり、ロック要求処理部２１は、ロック管理情報１５の「ロックのモード」と各タスク２〜４が取得を要求したロックのモードとの組に対応付けられたロック取得の可否を一時マトリックス１３から参照する。【００７４】
一方、ロック要求処理部２１は、各タスク２〜４が取得を要求したロックのモードが「共用モード」ではない場合には（ステップＳ１０１否定）、非対称マトリックス１１を参照する（ステップＳ１０５）。また、ロック要求処理部２１は、競合が発生していない場合には（ステップＳ１０３否定）、非対称マトリックス１１を参照する（ステップＳ１０５）。つまり、ロック要求処理部２１は、ロック管理情報１５の「ロックのモード」と各タスク２〜４が取得を要求したロックのモードとの組に対応付けられたロック取得の可否を非対称マトリックス１１から参照する。【００７５】
次に、ロック要求処理部２１は、非対称マトリックス１１又は一時マトリックス１３の参照結果が「Ｎ」であるか否かを判別する（ステップＳ１０６）。そして、ロック要求処理部２１は、参照結果が「Ｎ」ではなかった場合には（ステップＳ１０６否定）、参照結果が「Ｙ（待ち）」であるか否かを判別する（ステップＳ１０７）。また、ロック要求処理部２１は、参照結果が「Ｙ（待ち）」であった場合には（ステップＳ１０７肯定）、ロックの取得を要求したタスクを待ち状態にするとともに（ステップＳ１０８）、ロック管理情報１５の「ロック解放待ちキュー」に繋ぐ（ステップＳ１０９）。なお、ステップＳ１０８およびステップＳ１０９の処理を実行する順番は逆でもよい。【００７６】
次に、ロック要求処理部２１は、参照結果が「Ｙ（排他モードのまま）」であるか否かを判別する（ステップＳ１１０）。そして、ロック要求処理部２１は、マトリックスの参照結果が「Ｙ（排他モードのまま）」ではないと判別した場合には（ステップＳ１１０否定）、ロック管理情報１５の「ロックのモード」を変更する（ステップＳ１１１）。具体的には、ロック要求処理部２１は、ロック管理情報１５の「ロックのモード」を各タスク２〜４が取得を要求したロックのモードに変更する。その後、ロック要求処理部２１は、ロックの取得を要求したタスクをロック管理情報１５の「ロック取得済みキュー」に繋ぎ（ステップＳ１１２）、処理を終了する。【００７７】
一方、ロック要求処理部２１は、非対称マトリックス１１または一時マトリックス１３の参照結果が「Ｙ（待ち）」ではないと判別した場合には（ステップＳ１０７否定）、参照結果が「Ｙ（排他モードのまま）」であるか否かを判別する（ステップＳ１１０）。そして、ロック要求処理部２１は、参照結果が「Ｙ（排他モードのまま）」であると判別した場合には（ステップＳ１１０肯定）、ロックの取得を要求したタスクを「ロック取得済みキュー」に繋ぎ（ステップＳ１１２）、処理を終了する。【００７８】
また、ロック要求処理部２１は、非対称マトリックス１１または一時マトリックス１３の参照結果が「Ｎ」であると判別した場合には（ステップＳ１０６肯定）、ロックの取得を要求したタスクを待ち状態にする（ステップＳ１１３）。そして、ロック要求処理部２１は、ロックの取得を要求したタスクをロック管理情報１５の「ロック取得待ちキュー」に繋ぎ（ステップＳ１１４）、処理を終了する。なお、ステップＳ１１３の処理とステップＳ１１４の処理を実行する順序は、逆でもよい。【００７９】
次に、図７を用いて、競合判定部２２が実行する処理の流れについて説明する。図７は、実施例１に関わる競合判定部が実行する処理の流れの一例を説明するための図である。競合判定部２２は、ロック要求処理部２１から機能を呼び出されることによって、処理を開始する。【００８０】
まず、競合判定部２２は、ロック管理情報１５の「ロックのモード」が「排他モード」であるか否かを判別する（ステップＳ２０１）。また、競合判定部２２は、ロック管理情報１５の「ロックのモード」が「排他モード」であると判別した場合には（ステップＳ２０１肯定）、「ロック解放待ちキュー」にタスクが繋がっているか否かを判別する（ステップＳ２０２）。【００８１】
そして、競合判定部２２は、「ロック解放待ちキュー」にタスクが繋がっていると判別した場合には（ステップＳ２０２肯定）、ロックの取得を要求したタスクがロック管理情報１５の「ロック取得済みキュー」に繋がっているか否かを判別する（ステップＳ２０３）。そして、競合判定部２２は、ロックの取得を要求したタスクがロック管理情報１５の「ロック取得済みキュー」に繋がっていた場合には（ステップＳ２０３肯定）、競合が発生したと判定する（ステップＳ２０４）。その後、競合判定部２２は、競合が発生した旨をロック要求処理部２１に通知し、処理を終了する。【００８２】
一方、競合判定部２２は、ロック管理情報１５の「ロックのモード」が「排他モード」ではないと判定した場合には（ステップＳ２０１否定）、競合が発生していないと判定し（ステップＳ２０５）、その旨をロック要求処理部２１に通知して、処理を終了する。また、競合判定部２２は、ロック管理情報１５の「ロック解放待ちキュー」にタスクが存在しない場合には（ステップＳ２０２否定）、競合が発生していないと判定する（ステップＳ２０５）。また、競合判定部２２は、ロックの取得を要求したタスクがロック管理情報１５の「ロック取得済みキュー」に繋がっていない場合には（ステップＳ２０３否定）、競合が発生していないと判定する（ステップＳ２０５）。【００８３】
次に、図８を用いて、ロック解放処理部２３が実行する処理の流れについて説明する。図８は、実施例１に関わるロック解放処理部が実行する処理の流れの一例を説明するための図である。ロック解放処理部２３は、ロックを取得したタスクがロックを解放したことを契機として、処理を開始する。【００８４】
まず、ロック解放処理部２３は、ロック管理情報１５の「ロック取得済みキュー」からロックを解放したタスクを削除する（ステップＳ３０１）。次に、ロック解放処理部２３は、ロック管理情報１５の「ロック取得済みキュー」にタスクが繋がっているか否かを判別する（ステップＳ３０２）。そして、ロック解放処理部２３は、「ロック取得済みキュー」にタスクが繋がっていると判別した場合には（ステップＳ３０２肯定）、ロック管理情報１５の「ロック取得済みキュー」に存在する全てのタスクが「ロック解放待ちキュー」に存在するか否かを判別する（ステップＳ３０３）。【００８５】
そして、ロック解放処理部２３は、ロック管理情報１５の「ロック取得済みキュー」に存在する全てのタスクが「ロック解放待ちキュー」に存在すると判別した場合には（ステップＳ３０３肯定）、「ロック解放待ちキュー」に繋がったタスクの待ち状態を解放する（ステップＳ３０４）。その後、ロック解放処理部２３は、「ロック解放待ちキュー」からタスクを削除し（ステップＳ３０５）、処理を終了する。一方、ロック解放処理部２３は、ロック管理情報１５の「ロック取得済みキュー」に存在する全てのタスクが「ロック解放待ちキュー」に存在していないと判別した場合には（ステップＳ３０３否定）、処理を終了する。【００８６】
また、ロック解放処理部２３は、「ロック取得済みキュー」にタスクが繋がっていないと判別した場合には（ステップＳ３０２否定）、ロック管理情報１５の「ロックのモード」を「解放状態」に変更する（ステップＳ３０６）。次に、ロック解放処理部２３は、ロック管理情報１５の「ロック取得待ちキュー」にタスクが繋がれているか否かを判別する（ステップＳ３０７）。【００８７】
そして、ロック解放処理部２３は、「ロック取得待ちキュー」にタスクが繋がれていると判別した場合には（ステップＳ３０７肯定）、「ロック取得待ちキュー」に繋がれた先頭のタスクの待ち状態を解放し、ロックの取得を再度要求させる（ステップＳ３０８）。その後、ロック解放処理部２３は、処理を終了する。また、ロック解放処理部２３は、「ロック取得待ちキュー」にタスクが繋がれていないと判別した場合には（ステップＳ３０７否定）、処理を終了する。【００８８】
［実施例１の効果］
上述したように、実施例１に関わるロック制御装置２０は、非対称マトリックス１１に従って、各タスク２〜４による共用リソースのロックの取得を制御する。また、ロック制御装置２０は、各タスク２〜４によるロックの取得要求が競合しているか否かを判定する。そして、ロック制御装置２０は、各タスク２〜４によるロックの取得要求が競合していると判定した場合には、一時マトリックス１３に従って、各タスク２〜４による共用リソースのロックの取得を制御する。【００８９】
このため、ロック制御装置２０は、デッドロックを回避することができる。すなわち、ロック制御装置２０は、各タスク２〜４によるロックの取得要求が競合している場合には、デッドロックを回避するように設定された一時マトリックス１３に従って、各タスク２〜４によるロックの取得を制御する。この結果、ロック制御装置２０は、デッドロックを防ぐことができる。【００９０】
また、ロック制御装置２０は、同一のタスクによる重複したロックの取得を禁止する論理を各タスクに組み込まずとも、デッドロックを防ぐことができる。このため、ロック制御装置２０は、各タスク２〜４の実装を容易にすることができる。【００９１】
また、非対称マトリックス１１は、ロック管理情報１５の「ロックのモード」が「共用モード」である際に、要求されたロックのモードが「排他モード」である場合には、以下の処理を実行させる旨を示す。すなわち、非対称マトリックス１１は、ロックの取得を要求したタスクに対して、「排他モード」でのロックの取得を許可するとともに、「共用モード」でロックを取得したタスクがロックを解放するまで、共用リソースの利用を待機させることを示す。【００９２】
この結果、ロック制御装置２０は、非対称マトリックス１１を用いて、各タスク２〜４によるロックの取得を制御した場合には、以下の効果を奏する。すなわち、ロック制御装置２０は、「共用モード」でのロックの取得を要求するタスクが発生し続けても、「排他モード」でロックを取得したタスクに、有限な時間内で共用リソースを利用させることができる。【００９３】
また、一時マトリックス１３は、ロック管理情報１５の「ロックのモード」が「排他モード」である際に、要求されたロックのモードが「共用モード」である場合には、以下の処理を実行させる旨を示す。すなわち、一時マトリックス１３は、ロックの取得を要求したタスクに対して「共用モード」でのロックの取得を許可するとともに、ロック管理情報１５の「ロックのモード」を「排他モード」のままにする旨を示す。換言すると、一時マトリックス１３は、あるタスクによって現在取得されているロックのモードをそのままに保持するとともに、「共用モード」でのロックの取得を要求したタスクに、共用リソースの参照のみを許可する旨を示す。このため、ロック制御装置２０は、競合発生時に一時マトリックス１３に従ってロックの取得を制御した場合には、競合発生時のデッドロックを適切に防ぐことができる。【００９４】
また、ロック制御装置２０は、ロック管理情報１５の「ロックのモード」が「共用モード」である際に、「排他モード」でロックを取得したタスクが存在し、その後、以下の条件を満たした場合には、競合が発生したと判定する。すなわち、ロック制御装置２０は、「共用モード」でロックを取得していたタスクが「共用モード」で重複するロックの取得を要求した場合には、競合が発生したと判定する。このため、ロック制御装置２０は、適切に競合の発生を判定することができる結果、デッドロックを回避することができる。
【実施例２】
【００９５】
上述したロック制御装置２０は、各タスク２〜４によるロック取得の要求に応じて、競合が発生しているか否かを判定していた。しかし、実施例は、これに限定されるものではなく、他の方法を用いて、ロック取得の要求が競合しているか否かを判定するものとしてもよい。【００９６】
図９は、実施例２に係るリソース管理装置を説明するための図である。なお、図９中に示す各部１〜４、１０〜１５、２０〜２３のうち、実施例１と同様の処理を実行するものについては、図１と同じ符号を付すものとし、その符号での説明を省略する。【００９７】
例えば、実施例２に係るロック制御装置２０ａは、ロック要求処理部２１ａ、競合判定部２２ａ、ロック解放処理部２３を有する。また、ロック制御装置２０ａは、「共用モード」でロックを取得したタスクが所定の時間が経過するまでの間、「排他モード」でロックを取得したタスクによるロックの解放を待機しつづけた場合には、競合が発生したと判定する。つまり、ロック制御装置２０ａは、所定の時間が経過するまでの間、タスクが待機しつづけた場合には、競合が発生していると判断し、一時マトリックス１３に従ってロック取得の可否を判別する。【００９８】
以下、このようなロック制御装置２０ａが有するロック要求処理部２１ａ、競合判定部２２ａが実行する処理について説明する。図１０は、実施例２に係るロック要求処理部が実行する処理の流れを説明するためのフローチャートである。なお、図１０に示す処理のうち、ステップＳ４０１〜Ｓ４０７については、図６に示すステップＳ１０１〜１０７と同一の処理であるので、説明を省略する。【００９９】
実施例２に係るロック要求処理部２１ａは、マトリックスの参照結果が「Ｙ（待ち）」であった場合には（ステップＳ４０７肯定）、タスクを待ち状態にする（ステップＳ４０８）。次に、ロック要求処理部２１ａは、マトリックスの参照結果が「Ｙ（排他モードのまま）」であるか否かを判別する（ステップＳ４０９）。そして、ロック要求処理部２１ａは、マトリックスの参照結果が「Ｙ（排他モードのまま）」である場合には（ステップＳ４０９肯定）、処理を終了する。【０１００】
一方、ロック要求処理部２１ａは、マトリックスの参照結果が「Ｙ（排他モードのまま）」ではない場合には（ステップＳ４０９否定）、タスクから要求されたロックのモードに応じて、ロック管理情報１５のモードを変更する（ステップＳ４１０）。また、ロック要求処理部２１ａは、マトリックスの参照結果が「Ｎ」である場合には（ステップＳ４０６肯定）、タスクを待ち状態にし（ステップＳ４１１）、処理を終了する。なお、ロック要求処理部２１ａは、マトリックスの参照結果が「Ｙ（待ち）」ではない場合には（ステップＳ４０７否定）、マトリックスの参照結果が「Ｙ（排他モードのまま）」であるか否かを判別する（ステップＳ４０９）。【０１０１】
図１１は、実施例２に係る競合判定部が実行する競合判定処理の流れを説明するためのフローチャートである。まず、実施例２に係る競合判定部２２ａは、ロック管理情報１５の「ロックのモード」が「排他モード」であるか否かを判別する（ステップＳ５０１）。そして、競合判定部２２は、ロック管理情報１５の「ロックのモード」が「排他モード」である場合には（ステップＳ５０１肯定）、すべての既存タスクによるロックの解放を待機しているタスクが存在するか否かを判別する（ステップＳ５０２）。【０１０２】
また、競合判定部２２ａは、ロックの解放を待機しているタスクが存在する場合には（ステップＳ５０２肯定）、ロック管理情報１５の「ロックのモード」が「排他モード」になってから所定の時間が経過したか否かを判別する（ステップＳ５０３）。そして、競合判定部２２ａは、ロック管理情報１５の「ロックのモード」が「排他モード」になってから所定の時間が経過したと判別した場合には（ステップＳ５０３肯定）、次の処理を実行する。すなわち、競合判定部２２ａは、最後のタスクがロックを「共用モード」で取得してから所定の時間が経過したか否かを判別する（ステップＳ５０４）。【０１０３】
その後、競合判定部２２ａは、最後のタスクがロックを「共用モード」で取得してから所定の時間が経過したと判別した場合には（ステップＳ５０４肯定）、競合が発生したと判定する（ステップＳ５０５）。その後、競合判定部２２ａは、競合が発生した旨をロック要求処理部２１ａに通知し、処理を終了する。【０１０４】
一方、競合判定部２２ａは、ロックの解放を待機しているタスクが存在しない場合には（ステップＳ５０２否定）、競合の発生はないと判定し（ステップＳ５０７）、その旨をロック要求処理部２１ａに通知して、処理を終了する。また、競合判定部２２ａは、ロック管理情報１５の「ロックのモード」が「排他モード」になってから所定の時間が経過していない場合には（ステップＳ５０３否定）、以下の処理を行う。すなわち、競合判定部２２ａは、一定時間が経過したあとで、後述する定期競合判定処理を起動するように自装置を設定する（ステップＳ５０６）。その後、競合判定部２２ａは、競合が発生していないと判定し（ステップＳ５０７）、処理を終了する。また、最後のタスクがロックを「共用モード」で取得成功してから所定の時間が経過していないと判別した場合には（ステップＳ５０４否定）、一定時間経過後に定期競合判定処理を起動するように自装置を設定する（ステップＳ５０６）。【０１０５】
図１２は、定期競合判定処理を説明するための図である。競合判定部２２ａは、図１１に示すステップＳ５０６にて、定期競合判定処理を起動するよう設定した場合には、一定時間経過後に、図１２に示す処理を実行する。具体的には、競合判定部２２ａは、図１１に示した競合判定処理（図１１中ステップＳ５０１〜５０７）を実行する（ステップＳ６０１）。次に、競合判定部２２ａは、競合が発生したか否かを判定する（ステップＳ６０２）。【０１０６】
そして、競合判定部２２ａは、競合が発生したと判定した場合には（ステップＳ６０２肯定）、ロック要求処理部２１ａを呼び出し、ロック取得待ちの全てのタスクについて、図１０に示すロック要求処理を再実行させる（ステップＳ６０３）。その後、競合判定部２２ａは、処理を終了する。また、競合判定部２２ａは、競合が発生していないと判定した場合には（ステップＳ６０２否定）、処理を終了する。つまり、競合判定部２２ａは、所定の時間間隔で図１１および図１２に示す処理を実行し、競合が発生しているか否かを判定する。【０１０７】
［実施例２の効果］
上述したように、実施例２に係るロック制御装置２０ａは、「排他モード」でロックを取得したタスクによるロックの解放を、「共用モード」でロックを取得したタスクが、所定の時間が経過するまでの間、待機した場合には、競合が発生したと判定する。つまり、ロック制御装置２０ａの競合判定部２２ａは、「排他モード」でロックを取得したタスクと「共用モード」でロックを取得したタスクとが、所定の時間が経過するまでの間、待機した場合には、競合が発生したと判定する。【０１０８】
このため、ロック制御装置２０ａは、競合が発生したか否かを容易に判定することができる。つまり、ロック制御装置２０ａは、今までロックの取得を要求してきたタスクの情報をロック管理情報１５として記憶させなくとも、競合の発生を判定することができる。この結果、ロック制御装置２０ａは、リソース管理装置１の回路規模を抑えるとともに、容易に実装を行う事ができる。
【実施例３】
【０１０９】
これまで、実施例について説明したが、実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例３として本発明に含まれる他の実施例を説明する。【０１１０】
（１）競合判定について
上述した競合判定部２２は、あるタスクが「共用モード」でロックを取得している際に、他のタスクが「排他モード」でロックを取得し、さらに、「共用モード」でロックを取得していたタスクが「共用モード」で重複するロックの取得を要求した場合には、競合が発生したと判定した。また、上述した競合判定部２２ａは、あるタスクが「排他モード」でロックを取得し、他のタスクが「共用モード」でロックを取得してから、所定の時間が経過するまでの間、両タスクが待機した場合には、競合が発生したと判定した。【０１１１】
しかし、実施例は、これに限定されるものではなく、様々な方法を用いて、競合が発生した否かを判定するようにしてもよい。以下、図１３、図１４を用いて、競合が発生したか否かを判定する処理の他の例について説明する。【０１１２】
図１３は、競合が発生したか否かを判定するための処理の一例を説明するためのフローチャート（１）である。なお、図１３に示す処理は、図７に示す処理を一般化した処理に対応する。また、以下の説明では、実施例３に係るロック制御装置２０ｂは、ロック要求処理部２１ｂ、競合判定部２２ｂ、ロック解放処理部２３を有するものとする。【０１１３】
例えば、実施例３に係る競合判定部２２ｂは、ロック管理情報１５の「ロックのモード」が「排他モード」であるか否かを判別する（ステップＳ７０１）。そして、競合判定部２２ｂは、ロック管理情報１５の「ロックのモード」が「排他モード」である場合には（ステップＳ７０１肯定）、全ての既存タスクのロック解放を待っているタスクが存在するか否かを判別する（ステップＳ７０２）。そして、競合判定部２２ｂは、全ての既存タスクのロック解放を待っているタスクが存在する場合には（ステップＳ７０２肯定）、ロックを要求したタスクが既にロックを「共用モード」で取得済みであるか否かを判別する（ステップＳ７０３）。【０１１４】
その後、競合判定部２２ｂは、ロックを要求したタスクが既にロックを「共用モード」で取得済みであった場合には（ステップＳ７０３肯定）、競合が発生したと判定する（ステップＳ７０４）。一方、競合判定部２２ｂは、ロック管理情報１５のモードが「排他モード」でない場合には（ステップＳ７０１否定）、競合が発生していないと判定する（ステップＳ７０５）。同様に、競合判定部２２ｂは、全ての既存タスクのロック解放を待機しているタスクが存在しない場合には（ステップＳ７０２否定）、競合が発生していないと判定する（ステップＳ７０５）。また、競合判定部２２ｂは、ロックを要求したタスクが既にロックを「共用モード」で取得済みではない場合には（ステップＳ７０３否定）、競合が発生していないと判定する（ステップＳ７０５）。【０１１５】
このような競合判定部２２ｂを有するロック制御装置２０ｂは、競合の発生を判定することができる。結果として、ロック制御装置２０ｂは、デッドロックを適切に防ぐことができる。【０１１６】
他の例では、競合判定部２２ｂは、ロックのモードが「共用モード」である際にあるタスクが「排他モード」でロックを取得し、さらに他のタスクが「共用モード」でロックの取得を要求した場合には、以下の判定をおこなう。すなわち、競合判定部２２ｂは、「競合モード」でロックの取得を要求したタスクが他にも「共用モード」でロックを取得しているか否かを判別する。そして、競合判定部２２ｂは、「競合モード」でロックの取得を要求したタスクが他にも「共用モード」でロックを取得していると判定した場合には、競合が発生したと判定してもよい。【０１１７】
図１４は、競合が発生したか否かを判定するための処理の一例を説明するためのフローチャート（２）である。なお、図１４中のステップＳ８０１、Ｓ８０２、Ｓ８０４、Ｓ８０５については、図７中のステップＳ２０１、Ｓ２０２、Ｓ２０４、Ｓ２０５と同じ処理であるため、説明を省略する。【０１１８】
競合判定部２２ｂは、全ての既存タスクのロック解放を待っているタスクが存在する場合には（ステップＳ８０２肯定）、ロックの取得を要求したタスクが既に何らかのロックを取得済みであるか否かを判別する（ステップＳ８０３）。そして、競合判定部２２ｂは、ロックの取得を要求したタスクが既に何らかのロックを取得済みである場合には（ステップＳ８０３肯定）、競合が発生したと判定する（ステップＳ８０４）。【０１１９】
このように、競合判定部２２ｂは、ロックの取得を要求したタスクが他にもロックを取得済みであるか否かを判別することで、競合が発生したか否かを判定する。この結果、ロック制御装置２０ｂは、ロック管理情報１５にロックを取得した全タスクを「ロック取得済みキュー」に繋げずとも、各キューがロックを取得したか否かを記憶させればよいので、リソース管理装置１の回路規模を抑え、実装を容易にすることができる。【０１２０】
（２）マトリックスについて
図２に示す非対称マトリックス１１は、ロック取得の可否を示す情報として「Ｙ」、「Ｙ（待ち）」、「Ｎ」が格納されていた。また、図３に示す一時マトリックス１３は、ロック取得の可否を示す情報として「Ｙ（排他モードのまま）」、「Ｎ」が格納されていた。しかし、これらロック取得の可否を示す情報は、あくまで例示であり、上述した機能を果たすための情報であれば、任意の情報を格納することができる。【０１２１】
（３）プログラム
ところで、上記した実施例１〜３では、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、実施例はこれに限定されるものではなく、あらかじめ用意されたプログラムをコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図１５を用いて、実施例１に示したロック制御装置２０と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図１５は、ロック制御プログラムを実行するコンピュータの一例を説明するための図である。【０１２２】
図１５に例示されたコンピュータ１００は、ＲＡＭ（Random  Access  Memory）１２０、ＨＤＤ（Hard  Disk  Drive）１５０がバス１７０で接続される。また、図１５に例示されたコンピュータ１００は、ＣＰＵ（Central  Processing  Unit）１４０がバス１７０で接続される。【０１２３】
ＨＤＤ１５０には、ロック制御プログラム１５１があらかじめ保存される。ＣＰＵ１４０が、ＨＤＤ１５０からロック制御プログラム１５１を読み出して実行することによって、ＲＡＭ１２０には、非対称マトリックス１２１、一時マトリックス１２２が展開される。なお、非対称マトリックス１２１は、図１の非対称マトリックス１１と同じマトリックスであり、一時マトリックス１２２は、図１の一時マトリックス１３と同じマトリックスである。【０１２４】
また、ＣＰＵ１４０がロック制御プログラム１５１を読み出して実行することによって、ＣＰＵ１４０では、ロック要求処理プロセス１４１、競合判定プロセス１４２、ロック解放処理プロセス１４３が機能するようになる。なお、各プロセス１４１〜１４３は、図１に示した各部２１〜２３と同様の機能を発揮する。また、各プロセス１４１〜１４３は、実施例２または実施例３に係る各部と同等の機能を発揮するようにすることも可能である。【０１２５】
なお、本実施例で説明したロック制御プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ（Compact  Disc  Read  Only  Memory）、ＭＯ（Magneto  Optical  Disc）、ＤＶＤ（Digital  Versatile  Disc）などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【０１２６】
１  リソース管理装置
２〜４、３０、３１  タスク
１０  非対称マトリックス記憶部
１１  非対称マトリックス
１２  一時マトリックス記憶部
１３  一時マトリックス
１４  ロック管理情報記憶部
１５  ロック管理情報
２０  ロック制御装置
２１  ロック要求処理部
２２  競合判定部
２３  ロック解放処理部
【図１】
2012114516.tif 000003
【図２】
2012114516.tif 000004
【図３】
2012114516.tif 000005
【図４】
2012114516.tif 000006
【図５】
2012114516.tif 000007
【図６】
2012114516.tif 000008
【図７】
2012114516.tif 000009
【図８】
2012114516.tif 000010
【図９】
2012114516.tif 000011
【図１０】
2012114516.tif 000012
【図１１】
2012114516.tif 000013
【図１２】
2012114516.tif 000014
【図１３】
2012114516.tif 000015
【図１４】
2012114516.tif 000016
【図１５】
2012114516.tif 000017
【図１６】
2012114516.tif 000018
【図１７】
2012114516.tif 000019
【国際調査報告】
2012114516.tif 000020
2012114516.tif 000021