(57)【要約】【課題】ロックが開放されずに残ってしまうことを回避する。【解決手段】ユーザプログラム１の起動時に監視ソケットを開設し、ユーザプログラム１がロックを取得した際、ユーザプログラム１のプロセス番号及びスレッド番号をロック管理構造体４００に記録し、監視ソケットの切断によりユーザプログラム１の終了を検出した際、ユーザプログラム１がロックを取得中であるプロセス番号が記録された全てのロック管理構造体４００を検索し、検索されたロック管理構造体４００に記録されたプロセス番号についてのロックを開放する。【選択図】図１
2007249634.tif 000002
【特許請求の範囲】
【請求項１】
ユーザプログラムのロックを管理するロック管理方法であって、
ユーザプログラムの起動時に監視ソケットを開設する処理と、
前記ユーザプログラムがロックを取得した際、該ユーザプログラムのプロセス番号及びスレッド番号を第１の構造体に記録する処理と、
前記監視ソケットの切断により前記ユーザプログラムの終了を検出した際、該ユーザプログラムがロックを取得中であるプロセス番号が記録された全ての前記第１の構造体を検索する処理と、
検索された前記第１の構造体に記録されたプロセス番号についてのロックを開放する処理とを有するロック管理方法。
【請求項２】
請求項１に記載のロック管理方法において、
前記監視ソケットを開設した際、該監視ソケットを識別可能なソケット識別番号と、該監視ソケットを開設したユーザプログラムのプロセス番号とを対応づけて第２の構造体に記録する処理と、
前記監視ソケットの切断により前記ユーザプログラムの終了を検出した際、該監視ソケットの識別番号が記録された前記第２の構造体を検索する処理と、
前記第２の構造体に記録されたプロセス番号を取り出す処理とを有し、
前記第２の構造体から取り出されたプロセス番号が記録された前記第１の構造体を検索することを特徴とするロック管理方法。
【請求項３】
ユーザプログラムのロックを管理するロック管理システムであって、
ロックを取得したユーザプログラムのプロセス番号及びスレッド番号が記録される複数の第１の構造体と、
ユーザプログラムの起動時に監視ソケットを開設し、前記ユーザプログラムがロックを取得した際、該ユーザプログラムのプロセス番号及びスレッド番号を前記第１の構造体に記録し、前記監視ソケットの切断により前記ユーザプログラムの終了を検出した際、該ユーザプログラムがロックを取得中であるプロセス番号が記録された全ての前記第１の構造体を検索し、検索された前記第１の構造体に記録されたプロセス番号についてのロックを開放するロック管理手段とを有するロック管理システム。
【請求項４】
請求項３に記載のロック管理システムにおいて、
前記監視ソケットを識別可能なソケット識別番号と、該監視ソケットを開設したユーザプログラムのプロセス番号とが対応づけて記録される第２の構造体を有し、
前記ロック管理手段は、前記監視ソケットを開設した際、該監視ソケットを識別可能なソケット識別番号と、該監視ソケットを開設したユーザプログラムのプロセス番号とを対応づけて第２の構造体に記録し、前記監視ソケットの切断により前記ユーザプログラムの終了を検出した際、該監視ソケットの識別番号が記録された前記第２の構造体を検索し、前記第２の構造体に記録されたプロセス番号を取り出し、前記第２の構造体から取り出されたプロセス番号が記録された前記第１の構造体を検索することを特徴とするロック管理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドが同時に実行される際のロックを管理するロック管理方法及びロック管理システムに関する。
【背景技術】
【０００２】
一般に、プログラムカウンタやスタックといった、実行状態に関連する情報を持つプログラムの実行制御単位をスレッドと呼ぶ。また、プログラムコードやグローバルデータといった、プログラム全体で使われるリソースを持った実行制御単位をプロセスと呼ぶ。１つのプロセスには、１つもしくは複数のスレッドが存在する。
【０００３】
ある１つのスレッドがプログラム実行中に、ＯＳ（オペレーティングシステム）が不正アドレス参照など該当スレッドの実行を中断せざる得ない状況を検出した場合、ＯＳは該当スレッドの属するプロセス配下の全スレッドの実行を中断して、プロセスを終了させる。また、利用者からＯＳに対してプロセスの停止が要求された場合も同様である。
【０００４】
複数のスレッドが並行して動作することが可能な計算機システムにおいて、複数のスレッドが同一の共有資源をアクセスする場合、共有資源の一貫性を保証するために、一貫性が保証されない危険領域（クリティカルセクション）の区間を複数のスレッドが同時に実行しないように、共有資源に対応するロックを取得するロック機構が用いられている（例えば、特許文献１参照。）。ＯＳが提供する代表的なロック機能としては、セマフォやMutex Lock (Mutual exclusion lock)などが挙げられる。
【０００５】
このようなロック機構においては、正常にスレッドが動作している間は、危険領域に直前でロックを取得し、危険領域を抜けた直後でロックを解放する。
【特許文献１】特開２０００−３３９１８１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、スレッドが危険領域の区間を実行中に、該当スレッド自身もしくは同一プロセスに属する他スレッドの実行を中断せざる得ない状況が検出された場合、該当スレッドの実行が中断され、ロックが解放されることなく残ってしまう。こうしたロックの残留が発生すると、以降、同一のロックを取得しようとする全てのプロセスやスレッドが停止してしまい、致命的なシステム障害に及ぶ可能性が生じてしまうという問題点がある。
【０００７】
本発明は、上述したような従来の技術が有する問題点に鑑みてなされたものであって、ロックが開放されずに残ってしまうことを回避することができるロック管理方法及びロック管理システムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために本発明は、
ユーザプログラムのロックを管理するロック管理方法であって、
ユーザプログラムの起動時に監視ソケットを開設する処理と、
前記ユーザプログラムがロックを取得した際、該ユーザプログラムのプロセス番号及びスレッド番号を第１の構造体に記録する処理と、
前記監視ソケットの切断により前記ユーザプログラムの終了を検出した際、該ユーザプログラムがロックを取得中であるプロセス番号が記録された全ての前記第１の構造体を検索する処理と、
検索された前記第１の構造体に記録されたプロセス番号についてのロックを開放する処理とを有する。
【０００９】
上記のように構成された本発明においては、ユーザプログラムの起動時に監視ソケットを開設し、ユーザプログラムがロックを取得した際、該ユーザプログラムのプロセス番号及びスレッド番号を第１の構造体に記録しておき、監視ソケットの切断によりユーザプログラムの終了を検出した際、該ユーザプログラムがロックを取得中であるプロセス番号が記録された全ての第１の構造体を検索し、検索された第１の構造体に記録されたプロセス番号についてのロックを開放する。
【００１０】
このように、ユーザプログラムとロック管理手段との間で監視ソケットを開設すると同時に、ロック取得成功時、第１の構造体中にユーザプログラムのプロセス番号及びスレッド番号を記録し、監視ソケット切断によりユーザプログラムの終了を検出した際、該ユーザプログラムがロックを取得中である全ての第１の構造体を検索し、ロックを解放することにより、自動的にアンロック漏れを解消することを特徴とする。
【発明の効果】
【００１１】
本発明は、以上説明したように構成されているので、自動的にアンロック漏れを解消することが可能となる。
【発明を実施するための最良の形態】
【００１２】
以下に、本発明の実施の形態について図面を参照して説明する。
【００１３】
図１は、本発明のロック管理システムの実施の一形態を示す図である。
【００１４】
本形態は図１に示すように、ユーザプログラム１と、ロック管理処理２と、第２の構造体である複数の監視ソケット管理構造体３００と、第１の構造体である複数のロック管理構造体４００とを含んで構成されている。
【００１５】
ユーザプログラム１は、１つもしくは複数のスレッドが存在するプロセスとして起動される。
【００１６】
ロック管理処理２は、監視ソケット接続受付手段３と、ロック取得手段４と、ロック解放手段５と、監視ソケット切断検出手段６と、取得ロック全検索手段７とから構成されている。
【００１７】
監視ソケット管理構造体３００は、ソケット識別情報格納領域３０１と、ソケット接続プロセス番号情報格納領域３０２とを有している。
【００１８】
ロック管理構造体４００は、ロックカウンタ４０１と、ロックオーナープロセス番号格納領域４０２と、ロックオーナースレッド番号格納領域４０３とを有している。ここでロックカウンタ４０１の初期値は１である。
【００１９】
以下に、上記のように構成されたロック管理システムの動作について説明する。
【００２０】
まず、ユーザプログラム１の起動時の動作について説明する。
【００２１】
図２は、図１に示したロック管理システムにおいてユーザプログラム１の起動時の動作を説明するためのフローチャートである。
【００２２】
ユーザプログラム１を含むプロセスが起動され、最初のスレッド（メインスレッド）が起動されると、ユーザプログラム１は、ロック管理システムに対して監視ソケット接続要求を出す。監視ソケット接続要求を受け取ったロック管理システムは、監視ソケット接続受付手段３を呼び出す。
【００２３】
監視ソケット接続受付手段３は、まず、呼び出し元であるユーザプログラム１との間に監視ソケットを接続することにより、監視ソケットを開設する（ステップＳ１）。
【００２４】
次に、空きの監視ソケット管理構造体３００を確保する。もし、空きの監視ソケット管理構造体３００の確保に失敗した場合は、接続した監視ソケットを切断し、処理を終了する。
【００２５】
また、監視ソケット管理構造体３００の確保に成功した場合は、確保した監視ソケット管理構造体３００に対して、接続された監視ソケットを識別可能なソケット識別番号をソケット識別情報格納領域３０１に格納するとともに（ステップＳ２）、呼び出し元のユーザプログラム１のプロセス番号をソケット接続プロセス番号格納領域３０２に格納し（ステップＳ３）、処理を終了する。これにより、接続された監視ソケットのソケット識別番号と、呼び出し元のユーザプログラム１のプロセス番号とが１つの監視ソケット管理構造体３００にて対応づけられていることになる。
【００２６】
次に、ユーザプログラム１がロックを取得する際の処理について説明する。
【００２７】
図３は、図１に示したロック管理システムにおいてユーザプログラム１がロックを取得する際の処理を説明するためのフローチャートである。
【００２８】
ユーザプログラム１は、特定のロック管理構造体４００のロックを取得する場合、ロック取得手段４を呼び出す。
【００２９】
ロック取得手段４は、まず、指定されたロック管理構造体４００のロックカウンタ４０１を調べる（ステップＳ１１）。
【００３０】
そして、ロックカウンタ４０１の値が１の場合は（ステップＳ１２）、ロックカウンタ４０１の値を１減算すると同時に（ステップＳ１３）、呼び出し元のユーザプログラム１のプロセス番号をロックオーナープロセス番号格納領域４０２に格納し（ステップＳ１４）、また、呼び出し元のユーザプログラム１のスレッド番号をロックオーナースレッド番号格納領域４０３に格納し（ステップＳ１５）、処理を終了する。
【００３１】
一方、ロックカウンタ４０１の値が０以下の場合は、ロックカウンタ４０１を１減算し（ステップＳ１６）、ロック解放手段５からのロック解放通知を待ち合わせる。
【００３２】
そして、ロック解放手段５からロック解放通知が通知されたら（ステップＳ１７）、呼び出し元のユーザプログラム１のプロセス番号をロックオーナープロセス番号格納領域４０２に格納し、また、呼び出し元のユーザプログラム１のスレッド番号をロックオーナースレッド番号格納領域４０３に格納し、処理を終了する。
【００３３】
次に、ユーザプログラム１がロックを解放する際の処理について説明する。
【００３４】
図４は、図１に示したロック管理システムにおいてユーザプログラム１がロックを解放する際の処理を説明するためのフローチャートである。
【００３５】
ユーザプログラム１は、特定のロック管理構造体４００のロックを解放する場合、ロック解放手段５を呼び出す。
【００３６】
ロック解放手段５は、まず、指定されたロック管理構造体４００のロックカウンタ４０１を調べる（ステップＳ２１）。
【００３７】
そして、ロックカウンタ４０１の値が０以下の場合は（ステップＳ２２）、指定されたロック管理構造体４００のロックカウンタ４０１を１加算する（ステップＳ２３）。
【００３８】
次に、指定されたロック管理構造体４００のロックカウンタ４０１を再度調べ（ステップＳ２４）、ロックカウンタ４０１の値が０以下の場合は（ステップＳ２５）、ロック取得手段４にロック解放通知を通知し（ステップＳ２６）、処理を終了する。
【００３９】
また、ステップＳ２２，Ｓ２５において、ロックカウンタ ４０１の値が１の場合は、そのまま処理を終了する。
【００４０】
次に、ユーザプログラム１が動作するプロセスが終了した際の処理について説明する。
【００４１】
図５は、図１に示したロック管理システムにおいてユーザプログラム１が動作するプロセスが終了した際の処理を説明するためのフローチャートである。
【００４２】
ユーザプログラム１が動作するプロセスが終了すると、該当プロセスとの間で接続された監視ソケットの切断が監視ソケット切断検出手段６に通知される。
【００４３】
監視ソケット切断検出手段６は、まず、切断された監視ソケットのソケット識別番号と同一の値をソケット識別情報格納領域３０１に格納している監視ソケット管理構造体３００を検索する（ステップＳ３１）。もし、ソケット管理構造体３００の検索に失敗した場合は、処理を終了する。
【００４４】
また、ソケット管理構造体３００の検索に成功した場合は、ソケット管理構造体３００のソケット接続プロセス番号格納領域３０２からプロセス番号を取り出し（ステップＳ３２）、該当ソケット管理構造体３００を空き状態とした後、取得ロック全検索手段７に制御を渡す。
【００４５】
取得ロック全検索手段７は、ロックカウンタ４０１の値が０以下の場合（ステップＳ３３）、監視ソケット切断検出手段６から渡されたプロセス番号と同じ値をロックオーナープロセス番号格納領域４０２に格納している全てのロック管理構造体４００を検索し（ステップＳ３４）、それぞれのロック管理構造体４００を指定してロック解放手段５を呼び出す（ステップＳ３５）。
【図面の簡単な説明】
【００４６】
【図１】本発明のロック管理システムの実施の一形態を示す図である。
【図２】図１に示したロック管理システムにおいてユーザプログラムの起動時の動作を説明するためのフローチャートである。
【図３】図１に示したロック管理システムにおいてユーザプログラムがロックを取得する際の処理を説明するためのフローチャートである。
【図４】図１に示したロック管理システムにおいてユーザプログラムがロックを解放する際の処理を説明するためのフローチャートである。
【図５】図１に示したロック管理システムにおいてユーザプログラムが動作するプロセスが終了した際の処理を説明するためのフローチャートである。
【符号の説明】
【００４７】
１    ユーザプログラム
２    ロック管理処理
３    監視ソケット接続受付手段
４    ロック取得手段
５    ロック解放手段
６    監視ソケット切断検出手段
７    取得ロック全検索手段
２００    監視ソケット管理構造体
２０１    ソケット識別情報格納領域
２０２    ソケット接続プロセス番号格納領域
４００    ロック管理構造体
４０１    ロックカウンタ
４０２    ロックオーナープロセス番号格納領域
４０３    ロックオーナースレッド番号格納領域
【図１】
2007249634.tif 000003
【図２】
2007249634.tif 000004
【図３】
2007249634.tif 000005
【図４】
2007249634.tif 000006
【図５】
2007249634.tif 000007