(57)【特許請求の範囲】
【請求項１】
複数のスレッドを開始するに際して、各スレッドに識別子を付与し、前記各スレッドの終了に際して、前記識別子を伴って終了を通知するスレッド制御手段と、
リスト構造化されたデータからデータ要素を削除する削除スレッドが実行された場合に、前記識別子を伴った終了の通知により前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が確認されるまで、前記削除されたデータ要素の内容を変更できない状態に維持し、前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が前記識別子を伴って通知されている場合、前記削除されたデータ要素を再利用可能な状態にするデータ要素制御手段とを備え、
前記スレッド制御手段は、
前記識別子に含まれる開始順に基づいてアドレスを計算し、そのアドレス位置に実行中のスレッドの状態を保持する状態保持手段をさらに備え、
前記状態保持手段に格納される、前記識別子に対応するスレッドの終了を示す情報を制御し、
前記データ要素制御手段は、前記状態保持手段に格納される、前記識別子に対応するスレッドの終了を示す情報に基づいて、削除されたデータ要素が再利用可能かどうかを決定し、
前記状態保持手段は、あらかじめ決められたアドレス空間を有し、スレッドの開始順に前記アドレス空間を巡回するように各スレッドの状態を示す配列要素を保持し、
各配列要素は、
２巡目以降において、終了が通知されていないスレッドに対応する配列要素に対して追い越しが行なわれたことを示すフラグと、
前記追い越しが行なわれた配列要素に対応するスレッドの終了が通知されたことを示すフラグとを含む
情報処理装置。
【請求項２】
前記スレッド制御手段は、前記削除スレッドによる削除処理の完了時点における最新スレッドの識別子を取得し、
前記データ要素制御手段は、前記最新スレッドおよびそれ以前に実行を開始したすべてのスレッドが終了したか否かの問い合わせに応答して、前記スレッド制御手段によって前記最新スレッドおよびそれ以前に実行を開始したすべてのスレッドの終了が前記識別子を伴って通知されているか否かを調べ、前記終了が通知されている場合は、削除されたデータ要素を再利用可能状態にする請求項１に記載の情報処理装置。
【請求項３】
前記スレッド制御手段は、前記削除スレッドを除く、前記リスト構造化されたデータをアクセスする検索スレッドの開始に際して、識別子を付与し、前記検索スレッドの終了に際して、前記識別子を伴って終了を通知する請求項１または２に記載の情報処理装置。
【請求項４】
複数のスレッドを開始するに際して、各スレッドに識別子を付与し、前記各スレッドの終了に際して、前記識別子を伴って終了を通知するスレッド制御手段と、
リスト構造化されたデータからデータ要素を削除する削除スレッドが実行された場合に、前記識別子を伴った終了の通知により前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が確認されるまで、前記削除されたデータ要素の内容を変更できない状態に維持し、前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が前記識別子を伴って通知されている場合、前記削除されたデータ要素を再利用可能な状態にするデータ要素制御手段とを備え、
前記スレッド制御手段は、
最後に開始されたスレッドに付与された識別子である最大順序番号と、それ以前のスレッドがすべて終了しているスレッドの順序番号である最小順序番号と、各スレッドの開始および終了を示す情報を含む順序番号管理データとを保持する状態保持手段と、
開始されたスレッドに対して一意に増加する順序番号を付与する開始処理部と、順序番号に対応するスレッドが終了したことを順序番号管理データに反映する終了処理部とを含む開始終了処理手段とを備え、
前記リスト構造化されたデータをアクセスする検索スレッドの検索処理の開始に際して前記開始処理部を呼び出し、前記検索スレッドの検索処理の終了に際して前記終了処理部を呼び出し、
前記データ要素制御手段は、
前記削除スレッドからの要求に応答して、前記状態保持手段から前記最大順序番号を取得してそれを返す最大順序番号取得部と、前記削除スレッドから取得した最大順序番号と前記状態保持手段に保持された最小順序番号とを比較する最小順序番号比較部とを含む終了判定手段とを備え、
前記削除スレッドのデータ要素の削除処理の後に前記最大順序番号取得部と前記最小順序番号比較部とを呼び出すことにより、前記削除スレッドが削除したデータ要素が再利用可能かどうかの判定を実施する
情報処理装置。
【請求項５】
リスト構造化されたデータの検索を行う検索スレッドと、リスト構造化されたデータからデータ要素を削除する削除スレッドとを実行する処理手段と、
前記処理手段による複数のスレッドの実行を管理する処理状態管理手段とを備え、
前記処理状態管理手段は、
最後に開始されたスレッドに付与された識別子である最大順序番号と、それ以前のスレッドがすべて終了しているスレッドの順序番号である最小順序番号と、各スレッドの開始および終了を示す情報を含む順序番号管理データとを保持する状態保持手段と、
開始されたスレッドに対して一意に増加する順序番号を付与する開始処理部と、順序番号に対応するスレッドが終了したことを順序番号管理データに反映する終了処理部とを含む開始終了処理手段とを備え、
前記削除スレッドからの要求に応答して、前記状態保持手段から前記最大順序番号を取得してそれを返す最大順序番号取得部と、前記削除スレッドから取得した最大順序番号と前記状態保持手段に保持された最小順序番号とを比較する最小順序番号比較部とを含む終了判定手段とを備え、
前記検索スレッドの検索処理の開始に際して前記開始処理部を呼び出し、前記検索スレッドの検索処理の終了に際して前記終了処理部を呼び出し、
前記削除スレッドのデータ要素の削除処理の後に前記最大順序番号取得部と前記最小順序番号比較部とを呼び出すことにより、前記削除スレッドが削除したデータ要素が再利用可能かどうかの判定を実施する
情報処理システム。
【請求項６】
複数のスレッドを開始するに際して、各スレッドに識別子を付与し、
前記各スレッドの終了に際して、前記識別子を伴って終了を通知し、
リスト構造化されたデータからデータ要素を削除する削除スレッドが実行される場合に、前記識別子を伴った終了の通知により前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が確認されるまで、前記削除されたデータ要素の内容を変更できない状態に維持し、
前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が前記識別子を伴って通知されている場合、前記削除されたデータ要素を再利用可能な状態にし、
最後に開始されたスレッドに付与された識別子である最大順序番号と、それ以前のスレッドがすべて終了しているスレッドの順序番号である最小順序番号と、各スレッドの開始および終了を示す情報を含む順序番号管理データとを、状態保持手段に保持し、
開始されたスレッドに対して一意に増加する順序番号を付与し、
スレッドからの終了の通知を受けて、順序番号に対応するスレッドが終了したことを順序番号管理データに反映し、
リスト構造化されたデータからデータ要素を削除する削除スレッドからの要求に応答して、前記状態保持手段から前記最大順序番号を取得してそれを返し、
前記削除スレッドから取得した最大順序番号と、前記最小順序番号とを比較して、前記最大順序番号と前記最小順序番号とが一致する場合、または前記最大順序番号が前記最小順序番号よりも大きい場合に、前記削除スレッドが削除したデータ要素を再利用可能な状態にする
情報処理方法。
【請求項７】
複数のスレッドを開始するに際して、各スレッドに識別子を付与する処理と、
前記各スレッドの終了に際して、前記識別子を伴って終了を通知する処理と、
リスト構造化されたデータからデータ要素を削除する削除スレッドが実行される場合に、前記識別子を伴った終了の通知により前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が確認されるまで、前記削除されたデータ要素の内容を変更できない状態に維持する処理と、
前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が前記識別子を伴って通知されている場合、前記削除されたデータ要素を再利用可能な状態にする処理と、
最後に開始されたスレッドに付与された識別子である最大順序番号と、それ以前のスレッドがすべて終了しているスレッドの順序番号である最小順序番号と、各スレッドの開始および終了を示す情報を含む順序番号管理データとを、状態保持手段に保持する処理と、
開始されたスレッドに対して一意に増加する順序番号を付与する処理と、
スレッドからの終了の通知を受けて、順序番号に対応するスレッドが終了したことを順序番号管理データに反映する処理と、
リスト構造化されたデータからデータ要素を削除する削除スレッドからの要求に応答して、前記状態保持手段から前記最大順序番号を取得してそれを返す処理と、
前記削除スレッドから取得した最大順序番号と、前記最小順序番号とを比較して、前記最大順序番号と前記最小順序番号とが一致する場合、または前記最大順序番号が前記最小順序番号よりも大きい場合に、前記削除スレッドが削除したデータ要素を再利用可能な状態にする処理と
をコンピュータに実行させる制御プログラム。
【請求項８】
複数のスレッドを開始するに際して、各スレッドに識別子を付与し、前記各スレッドの終了に際して、前記識別子を伴って終了を通知するスレッド制御手段と、
リスト構造化されたデータからデータ要素を削除する削除スレッドが実行された場合に、前記識別子を伴った終了の通知により前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が確認されるまで、前記削除されたデータ要素の内容を変更できない状態に維持し、前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が前記識別子を伴って通知されている場合、前記削除されたデータ要素を再利用可能な状態にするデータ要素制御手段とを備え、
最後に開始されたスレッドに付与された識別子である最大順序番号と、それ以前のスレッドがすべて終了しているスレッドの順序番号である最小順序番号と、各スレッドの開始および終了を示す情報を含む順序番号管理データとを保持する状態保持手段と、
開始されたスレッドに対して一意に増加する順序番号を付与する開始処理部と、
スレッドからの終了の通知を受けて、順序番号に対応するスレッドが終了したことを順序番号管理データに反映する終了処理部とを備え、
前記データ要素制御手段は、
リスト構造化されたデータからデータ要素を削除する削除スレッドからの要求に応答して、前記状態保持手段から前記最大順序番号を取得してそれを返す最大順序番号取得部と、
前記削除スレッドから取得した最大順序番号と、前記最小順序番号とを比較する最小順序番号比較部とを備え、前記最大順序番号と前記最小順序番号とが一致する場合、または前記最大順序番号が前記最小順序番号よりも大きい場合に、前記削除スレッドが削除したデータ要素を再利用可能な状態にする
情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドを並列的に実行する情報処理システムにおいて、リスト構造化されたデータからデータ要素を削除する情報処理技術に関する。
【背景技術】
【０００２】
上記技術分野において、クリティカルセクションを形成することなく、複数のスレッドからのアクセスを矛盾なく実施する方法として、ｃｍｐｘｃｈｇ命令が知られている。ｃｍｐｘｃｈｇ命令は、例えば、Ｉｎｔｅｌ  ６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ  Ｖｏｌｕｍｅ  ２Ａ：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｒｅｆｅｒｅｎｃｅ，Ａ−Ｍ（以下、非特許文献１と称する）に開示される。マルチプロセッサ命令の典型例であるｃｍｐｘｃｈｇ命令は、ＣＡＳ（Ｃｏｍｐａｒｅ  Ａｎｄ  Ｓｗａｐ）操作により、命令実行中に他の命令によりメモリが変更されないように制御する。
Ｍａｇｅｄ  Ｍ．Ｍｉｃｈａｅｌ，Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｄｙｎａｍｉｃ  Ｌｏｃｋ−Ｆｒｅｅ  Ｈａｓｈ  Ｔａｂｌｅｓ  ａｎｄ  Ｌｉｓｔ−Ｂａｓｅｄ  Ｓｅｔｓ，ＡＣＭ  ＳＰＡＡ’０２（以下、非特許文献２と称する）は、上記ＣＡＳ操作を用いて、リスト構造化されたデータへのデータ要素の挿入または、リスト構造化されたデータからのデータ要素の削除において、正しい実行結果が得られるアルゴリズムを開示する。ここで、リスト構造とは、複数のデータ要素がポインタで接続された構造をいう。非特許文献２では、リスト構造化されたデータからのデータ要素の削除を、論理的な削除を実行するＣＡＳ操作と物理的な削除を実行するＣＡＳ操作とにより実行する。そして、論理的に削除されたが物理的に削除されていないデータ要素を表わすマークビットを設けることにより、削除命令処理中に他の命令が介入することを防ぐ。ここで、データ要素の削除とは、データ要素が持つ情報を記録するために割り当てられていたメモリ領域が解放されて未使用状態となることである。解放されたメモリ領域は、再利用可能状態となる。
一方、米国特許第５，４４２，７５８号に開示されるＲＣＵ（Ｒｅａｄ−Ｃｏｐｙ  Ｕｐｄａｔｅ）アルゴリズムは、リスト構造化されたデータからのデータ要素の削除を、非特許文献２に開示される削除に相当する削除フェーズと、削除したデータ要素を再利用可能状態にする再設定フェーズとにより実行する。
【発明の概要】
【０００３】
非特許文献２では、リスト構造化されたデータからデータ要素を削除する削除スレッドが正しく処理されることは保証される。しかしながら、削除スレッドの開始より前に開始された、削除されるデータ要素にアクセスするスレッドが正しく処理されることは保証されない。これは、データ要素に割り当てられていたメモリ領域は、物理的な削除が行われた後は再利用可能状態となるためである。ここで、再利用可能状態とは、そのメモリ領域に別の情報を書き込んでも、そのデータ要素が前に属していたリスト構造化されたデータを操作する別スレッドの処理に悪影響を及ぼさない状態を意味する。削除されたデータ要素が再利用可能状態となり、その内容が書き換えられると、削除スレッドの開始より前に開始された、削除されたデータ要素にアクセスするスレッドは、書き換えられたデータ要素にアクセスしてしまう。したがって、このスレッドは正しく処理されない恐れがあるという課題がある。
一方、米国特許第５，４４２，７５８号によれば、リストから削除した要素が再利用可能であって、再設定フェーズに移行可能か否かの判定が実施される。したがって、削除スレッドの開始より前に開始された、削除されるデータ要素にアクセスするスレッドの実行中に、データ要素の内容が書き換えられることは防ぐことができる。しかしながら、再設定フェーズに移行可能か否かの判定は、削除フェーズ完了後に全プロセッサがプロセス切換を行なったことを確認することによって実施される。したがって、削除されたデータ要素が実際に再利用可能状態になったとしても、そのデータ要素が再利用できるのは、削除されてからかなり後になってしまうという課題がある。
例えば、スレッド間通信において情報交換することにより、上記課題を解決することも考えられる。しかしながら、多くの削除スレッドと、データ要素にアクセスする多くの検索スレッドとが並列に実行している場合は、オーバーヘッドが大きくなると共に、管理が煩雑になってしまう。
本発明の目的は、上述の課題を解決する技術を提供することを主要な目的とする。
課題を解決するための手段
本発明の第１の情報処理装置は、複数のスレッドを開始するに際して、各スレッドに識別子を付与し、前記各スレッドの終了に際して、前記識別子を伴って終了を通知するスレッド制御手段と、リスト構造化されたデータからデータ要素を削除する削除スレッドが実行された場合に、前記識別子を伴った終了の通知により前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が確認されるまで、前記削除されたデータ要素の内容を変更できない状態に維持し、前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が前記識別子を伴って通知されている場合、前記削除されたデータ要素を再利用可能な状態にするデータ要素制御手段とを備える。
本発明の第１の情報処理システムは、リスト構造化されたデータの検索を行う検索スレッドと、リスト構造化されたデータからデータ要素を削除する削除スレッドとを実行する処理手段と、前記処理手段による複数のスレッドの実行を管理する処理状態管理手段とを備え、前記処理状態管理手段は、最後に開始されたスレッドに付与された識別子である最大順序番号と、それ以前のスレッドがすべて終了しているスレッドの順序番号である最小順序番号と、各スレッドの開始および終了を示す情報を含む順序番号管理データとを保持する状態保持手段と、開始されたスレッドに対して一意に増加する順序番号を付与する開始処理部と、順序番号に対応するスレッドが終了したことを順序番号管理データに反映する終了処理部とを含む開始終了処理手段とを備え、前記削除スレッドからの要求に応答して、前記状態保持手段から前記最大順序番号を取得してそれを返す最大順序番号取得部と、前記削除スレッドから取得した最大順序番号と前記状態保持手段に保持された最小順序番号とを比較する最小順序番号比較部とを含む終了判定手段とを備え、前記検索スレッドの検索処理の開始に際して前記開始処理部を呼び出し、前記検索スレッドの検索処理の終了に際して前記終了処理部を呼び出し、前記削除スレッドのデータ要素の削除処理の後に前記最大順序番号取得部と前記最小順序番号比較部とを呼び出すことにより、前記削除スレッドが削除したデータ要素が再利用可能かどうかの判定を実施する。
本発明の第１の情報処理方法は、複数のスレッドを開始するに際して、各スレッドに識別子を付与し、前記各スレッドの終了に際して、前記識別子を伴って終了を通知し、リスト構造化されたデータからデータ要素を削除する削除スレッドが実行される場合に、前記識別子を伴った終了の通知により前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が確認されるまで、前記削除されたデータ要素の内容を変更できない状態に維持し、前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が前記識別子を伴って通知されている場合、前記削除されたデータ要素を再利用可能な状態にする。
なお同目的は、上記の各構成を有する情報処理装置および情報処理方法を、コンピュータによって実現するコンピュータ・プログラム、およびそのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体によっても達成される。
発明の効果
本発明によれば、リスト構造化されたデータからのデータ要素の削除が実行中のスレッドに影響を与えることなく、削除されたデータ要素を迅速に再利用可能状態にすることができるという効果が得られる。
【図面の簡単な説明】
【０００４】
図１は、本発明の第１実施形態に係る情報処理システムの構成を示すブロック図である。
図２は、本発明の第２実施形態に係る情報処理システムの構成を示すブロック図である。
図３は、本発明の第２実施形態に係る情報処理システムの動作手順を示すシーケンス図である。
図４は、本発明の第２実施形態に係る処理状態管理部の構成を示すブロック図である。
図５は、本発明の第２実施形態で使用する変数の定義を示す図である。
図６は、本発明の第２実施形態で使用する操作の定義を示す図である。
図７Ａは、本発明の第２実施形態で使用するデータ構成を示す図である。
図７Ｂは、本発明の第２実施形態で使用するデータ表記を示す図である。
図８Ａは、本発明の第２実施形態に係るｂｏａｒｄ配列の構成例を示す図である。
図８Ｂは、本発明の第２実施形態に係るｂｏａｒｄ配列の他の構成例を示す図である。
図９は、本発明の第２実施形態に係る情報処理装置のハードウェア構成を示すブロック図である。
図１０Ａは、本発明の第２実施形態に係る情報処理装置のリスト検索スレッドの処理手順を示すフローチャートである。
図１０Ｂは、本発明の第２実施形態に係る情報処理装置のリスト要素削除スレッドの処理手順を示すフローチャートである。
図１１Ａは、本発明の第２実施形態に係る開始処理の処理手順を示すフローチャートである。
図１１Ｂは、本発明の第２実施形態に係る開始処理の処理手順を示すフローチャートである。
図１２Ａは、本発明の第２実施形態に係る終了処理の処理手順を示すフローチャートである。
図１２Ｂは、本発明の第２実施形態に係る終了処理の処理手順を示すフローチャートである。
図１２Ｃは、本発明の第２実施形態に係る終了処理の処理手順を示すフローチャートである。
図１３は、本発明の第２実施形態に係る最大順序番号取得処理の処理手順を示すフローチャートである。
図１４は、本発明の第２実施形態に係る最小番号比較処理の処理手順を示すフローチャートである。
図１５は、本発明の第３実施形態に係る情報処理システムの構成を示すブロック図である。
【発明を実施するための最良の形態】
【０００５】
以下に、図面を参照して、本発明の実施の形態について例示的に詳しく説明する。ただし、以下の実施の形態に記載されている構成要素は単なる例示であり、本発明の技術範囲をそれらのみに限定する趣旨のものではない。
第１実施形態
本発明の第１実施形態としての情報処理装置１００について、図１を用いて説明する。情報処理装置１００は、複数のスレッドを並列的に（並行して）実行するように構成されている。
図１に示すように、情報処理装置１００は、スレッド制御部１０１と、データ要素制御部１０２と、を含む。スレッド制御部１０１は、複数のスレッド１１０を開始するに際して、各スレッドに識別子１２１を付与すると共に、各スレッドの終了に際して、識別子１２１を伴って終了１２２を通知する。データ要素制御部１０２は、リスト構造化されたデータ１３０からデータ要素１３１を削除する削除スレッド１２０が実行された場合に、以下のように動作する。すなわち、データ要素制御部１０２は、識別子１２１を伴った終了１２２の通知により削除スレッド１２０の削除処理以前に開始したすべてのスレッドａ〜ｃの終了が確認されるまで、削除されたデータ要素１３１の内容を変更できない状態１３１ａに維持する。データ要素制御部１０２は、削除スレッド１２０の削除処理以前に開始したすべてのスレッドａ〜ｃの終了が識別子１２１を伴って通知されている場合、削除されたデータ要素１３１を再利用可能な状態１３１ｂにする。
スレッド制御部１０１は、以下の実施形態における開始終了処理部４１０および状態保持部４３０に相当し、データ要素制御部１０２は、同じく終了判定部４２０に相当する。
ここで、再利用可能な状態にするとは、データ要素が持つ情報を記録するために割り当てられていたメモリ領域を解放し、未使用な状態とすることである。
本実施形態によれば、リスト構造化されたデータからのデータ要素の削除が実行中のスレッドに影響を与えることなく、削除されたデータ要素を迅速に再利用可能状態にすることができる。
第２実施形態
次に、本発明の第２実施形態に係る情報処理システムについて説明する。本実施形態では、情報処理システムは、各処理スレッドの開始および終了に応じて、処理状態を管理する処理状態管理部を備える。処理状態管理部は、リスト構造化されたデータからデータ要素を削除するリスト要素削除スレッドによる削除処理において、実行中のスレッドに影響を与えることなく、削除されたデータ要素を迅速に再利用可能な状態にする。
本実施形態によれば、処理状態管理部が複数の処理スレッドを管理することによって、リスト構造化されたデータからのデータ要素の削除が、実行中のスレッドに影響を与えることなく、削除されたデータ要素を迅速に再利用可能な状態にすることができる。
情報処理システムの構成
図２は、本実施形態に係る情報処理システム２００の構成を示すブロック図である。情報処理システム２００は、記憶部２２０と、処理状態管理部２１０とを備える。
図２において、リスト要素削除スレッド２０１は、リスト構造化したデータからデータ要素を削除する処理を含むスレッドである。リスト検索スレッド２０２、２０３は、リスト構造化したデータにアクセスする処理を含むスレッドを代表している。情報処理システム２００に含まれるどのプロセッサのどのＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）が、これらスレッドを開始および実行してもよい。ただし、第２実施形態の以下の説明では、説明を簡潔にするため、１つのプロセッサが、並列的にスレッドを実行することを説明する。
処理状態管理部２１０は、上記各スレッド２０１〜２０３の開始および終了に応じた処理を実行することによって、スレッドの処理状態を管理する（図４参照）。記憶部２２０は、リスト構造化したデータを含むデータを記憶する。なお、記憶部２２０は、例えば１つのプロセッサの主記憶（ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ））であっても、ストレージ（ディスクなど）であってもよい。記憶部２２０は、また、複数のプロセッサに分散されるように構成されても、情報処理システム２００内で共有されるように構成されてもよい。
情報処理システムの動作手順
図３は、本実施形態に係る情報処理システム２００の動作手順を示すシーケンス図である。図３を参照して、情報処理システム２００の動作手順の概略を説明する。なお、図３には、図２に示した各要素間のやりとりを記載したが、並列的に処理されるスレッドの数に制限はない。また、図３においては、全体の流れが明瞭になるように、細かな処理間のやりとりの表示は省略する。また、各スレッドの開始順は以下の通りである。すなわち、まず、リスト検索スレッド２０２が処理を開始され、次に、リスト要素削除スレッド２０１が処理を開始し、最後に、リスト検索スレッド２０３が処理を開始する。
最初に書開始されたリスト検索スレッド２０２は、まず、ステップＳ３０１において、処理状態管理部２１０に対して自分の順番番号を要求する。処理状態管理部２１０は、ステップＳ３０３において、スレッドを管理するｂｏａｒｄ配列（図７Ａ参照）に新たなスレッドの開始を追加し、ｂｏａｒｄ配列の先頭位置ポインタ（ｈｅａｄ：以下では、最大順序番号とも呼ぶ）を＋１する。そして、処理状態管理部２１０は、ステップＳ３０５において、その順番番号（ｈｅａｄ＋１）をリスト検索スレッド２０２に返す。リスト検索スレッド２０２は、ステップＳ３０７においてリスト検索処理を開始し、記憶部２２０に記憶されたリスト構造化されたデータを検索する。
続いて、リスト要素削除スレッド２０１は、処理を開始し、ステップＳ３０９において、記憶部２２０のリスト構造化されたデータからデータ要素を削除する。かかる削除処理は、ステップＳ３１１のように、ＣＡＳ操作を伴う非特許文献１または２に開示される操作により実施されてよい。ただし、この時点では、リスト要素削除スレッド２０１は、削除されたデータ要素の再利用は不可の状態、すなわち、内容が変更されないように維持をする。リスト要素削除スレッド２０１は、削除処理の完了時点であるステップＳ３１３において、処理状態管理部２１０に対して現在の最大順序番号を要求する。処理状態管理部２１０は、ステップＳ３１５において、現在の最大順序番号（本例では、ｈｅａｄ＋１）をリスト要素削除スレッド２０１に返す。
リスト要素削除スレッド２０１は、次に、ステップＳ３３１において、処理状態管理部２１０に対して、受け取った最大順序番号（ｈｅａｄ＋１）を送付すると共に、最大順序番号（ｈｅａｄ＋１）を持つスレッドが終了したか否かを問い合わせる。処理状態管理部２１０は、ステップＳ３３３において、最大順序番号（ｈｅａｄ＋１）を持つスレッドの終了をｂｏａｒｄ配列内のデータに基づいて判断する。本例では、リスト検索スレッド２０２は、開始したばかりなのでまだ終了していない。そこで、処理状態管理部２１０は、ステップＳ３３５において、リスト要素削除スレッド２０１に対して最大順序番号（ｈｅａｄ＋１）を持つスレッドの未終了を通知する。そのため、削除されたデータ要素は、再利用が不可のままであり、その内容が変更されないように維持される。
最後に開始したリスト検索スレッド２０３は、まず、ステップＳ３２１において、処理状態管理部２１０に対して自分の順番番号を要求する。処理状態管理部２１０は、ステップＳ３２３において、スレッドを管理するｂｏａｒｄ配列に新たなスレッドの開始を追加し、ｂｏａｒｄ配列の先頭位置ポインタを＋１（図３では、処理を明瞭にするため、ｈｅａｄ＋２と示す）する。そして、処理状態管理部２１０は、ステップＳ３２５において、その順番番号（ｈｅａｄ＋２）をリスト検索スレッド２０３に返す。リスト検索スレッド２０３は、ステップＳ３２７においてリスト検索処理を開始すると共に、記憶部２２０に記憶されたリスト構造化されたデータを検索する。なお、リスト検索スレッド２０３の開始のタイミングは、リスト要素削除スレッド２０１によるデータ要素の削除後であれば、図３に示すタイミングに限定されない。
リスト要素削除スレッド２０１は、ステップＳ３３１−Ｓ３３５を、所定の時間間隔で繰り返す。すなわち、リスト要素削除スレッド２０１は、所定の時間間隔で最大順序番号を処理状態管理部２１０に送付すると共に、リスト検索スレッド２０２までのすべてのスレッドが終了したか否かを問い合わせる。図３においては、リスト検索スレッド２０２が処理の終了を処理状態管理部２１０に対して報告しない限り、削除以前の全スレッドの終了状態にならないので、上記終了の報告までは削除したデータ要素の内容が維持される。
ステップＳ３４１において、リスト検索スレッド２０２は、処理を終了して、処理状態管理部２１０に処理の終了を報告する。処理状態管理部２１０は、ステップＳ３４３において、順序番号（ｈｅａｄ＋１）を付与されたリスト検索スレッド２０２の終了処理を行なう。ステップＳ３４５において、リスト要素削除スレッド２０１は、最大順序番号（ｈｅａｄ＋１）を送付する。そして、リスト要素削除スレッド２０１は、処理状態管理部２１０に対して、リスト検索スレッド２０２までのすべてのスレッドが終了したか否かを問い合わせる。この時点では、処理状態管理部２１０は、ステップＳ３４７において、リスト検索スレッド２０２の終了を判定する（実際には、処理状態管理部２１０は、リスト要素削除スレッド２０１の削除以前に開始した全スレッドの終了を判定する）。そして、ステップＳ３４９において、処理状態管理部２１０は、リスト要素削除スレッド２０１に対して最大順序番号（ｈｅａｄ＋１）を持つスレッドの終了を通知する。
リスト要素削除スレッド２０１は、最大順序番号（ｈｅａｄ＋１）を持つスレッドの終了の通知を受けて、ステップＳ３５１において、記憶部２２０に対して削除したデータ要素の再利用可能を通知する。処理状態管理部２１０は、ステップＳ３５３に示すように、記憶部２２０に対し、リスト構造化されたデータからリスト要素削除スレッド２０１により削除されたデータ要素を、この時点で再利用可能にする。すなわち、処理状態管理部２１０は、削除されたデータ要素が持つ情報を記録するために割り当てられていたメモリ領域を解放し、未使用な状態にする。
このような動作手順により、リスト構造化されたデータからリスト要素削除スレッド２０１により削除されたデータ要素の内容は、リスト要素削除スレッド２０１の削除処理以前に開始された全スレッドが終了するまでは、維持される。また、対象のスレッドが終了すれば、直ちに削除されたデータ要素が再利用可能になる。なお、以上の説明では、リスト要素削除スレッド２０１の削除処理以前に開始された全スレッドの終了を条件としたが、リスト構造のデータにアクセスしないスレッドの終了は待つ必要はない。したがって、スレッドの処理内容による、さらなる制御も可能である。その場合には、削除されたデータ要素をより早く再利用可能にすることができる。
処理状態管理部の構成
図４は、本実施形態に係る処理状態管理部２１０の構成を示すブロック図である。
処理状態管理部２１０は、開始終了処理部４１０と、終了判定部４２０と、状態保持部４３０とを有する。開始終了処理部４１０は、開始処理部４１１と終了処理部４１２とを含む。終了判定部４２０は、最大順序番号取得部４２１と最小順序番号比較部４２２とを含む。状態保持部４３０は、最新スレッドに付与された順序番号である最大順序番号４３１と、それ以前のスレッドがすべて終了しているスレッドの順序番号である最小順序番号４３２と、付与済および処理済の順序番号を管理する順序番号管理データ４３３とを保持する。
これらの機能構成部は、それぞれスレッド処理部から引数を持って呼び出され、処理後に戻り値をスレッド処理部に返す。その概略処理を、以下に説明する。
開始処理部４１１は、最大順序番号４３１と順序番号管理データ４３３とを参照および更新することにより、呼び出し元のスレッドに順序番号を付与する。終了処理部４１２は、呼び出し元のスレッドから順序番号を受け取り、最大順序番号４３１と最小順序番号４３２と順序番号管理データ４３３とを参照および更新すると共に、処理の完了した順序番号を最小順序番号４３２に反映させる。
最大順序番号取得部４２１は、呼び出された時点における最大順序番号４３１を呼び出し元のスレッドに渡す。最小順序番号比較部４２２は、呼び出し元のスレッドから渡された順序番号と最小順序番号４３２とを比較し、その順序番号に対応するスレッドが完了しているかどうかを呼び出し元のスレッドに通知する。
本実施形態では、リスト構造データの検索を行うリスト検索スレッドは、検索処理の開始時に開始処理部４１１を呼び出すことにより、検索処理に対応する順序番号を受け取る。リスト検索スレッドはまた、検索処理の終了時にその検索処理に対応する順序番号を引数として用いて、終了処理部４１２を呼び出す。
リスト構造からデータ要素を削除するリスト要素削除スレッドは、リスト構造データからデータ要素を物理的に削除するアトミックなメモリアクセスを実行した後に、最大順序番号取得部４２１を呼び出す。これにより、リスト要素削除スレッドは、その時点における最大順序番号４３１を取得する。その後、リスト要素削除スレッドは、その順序番号を引数として用いて最小順序番号比較部４２２を呼び出すことにより、その順序番号に対応するスレッドまで完了しているか否かを調べる。これにより、リスト要素削除スレッドは、削除したデータ要素が再利用可能かどうかを判定する。
以上の構成により、リスト要素削除スレッドが削除したデータ要素を参照する可能性のあるリスト検索スレッドによる検索処理が終了したら、直ちに、そのデータ要素が再利用可能であることを認識することができるという効果が得られる。また、リスト検索処理完了の通知は、処理状態管理部２１０を経由して行われるので、リスト検索スレッドとリスト要素削除スレッドとが直接、通信を行う必要がない。したがって、システムのオーバーヘッドを抑えると共に、管理が煩雑になることを防止できるという効果が得られる。
以上、処理状態管理部２１０の動作手順の概略を上記に説明したが、以下に、より具体的な処理状態管理部２１０の動作手順を説明する。
変数の定義
図５は、本実施形態で使用する変数の定義５００を示す図である。
本実施形態では、状態保持部４３０に格納されている最大順序番号４３１、最小順序番号４３２、順序番号管理データ４３３は、それぞれ、全スレッドからアクセス可能な変数である。５１０に示すように、それぞれの変数は、ｈｅａｄ、ｔａｉｌ、ｂｏａｒｄ［ＳＩＺＥ］と表記される。また、配列である順序番号管理データの配列要素数を示す定数は、ＳＩＺＥと表記される。また、５２０に示すように、スレッド別の変数として、スレッドに割り当てられる順序番号を格納する変数（ｍｙｓｅｑと表記）が用意される。さらに、５３０に示すように、一時記憶用の変数として、ｂｏａｒｄ配列要素もしくはその値をコピーする変数（ｓｔａｔｅ）と変数（ｎｅｗｖ）とが用意される。
操作の定義
図６は、本実施形態で使用する操作の定義６００を示す図である。操作の定義６００は、操作表記６０１とその操作内容６０２とを含む。
本実施形態では、基本操作として、以下の３操作が実行される。すなわち、変数ｖに対し値“１”を不可分加算する操作６１０と、変数ｖに対してｃｍｐｘｃｈｇ操作を不可分に実行する操作６２０と、変数ｖに対応する配列のインデックス（ｖ％ＳＩＺＥ）を求める操作６３０である。各々、ａｔｏｍｉｃ＿ｉｎｃ（＆ｖ）、ａｔｏｍｉｃ＿ｃｍｐｘｃｈｇ（＆ｖ，ｏ，ｎ）、ＯＦＦＳＥＴ（ｖ）と表記される。
データ構成
図７Ａは、本実施形態で使用するデータ構成７００を示す図である。
図７Ａに示すように、順序番号７１０は、ｂｏａｒｄ配列のインデックスに対応するＯＦＦＳＥＴ値として使用される下位側ビット７１２と、ｂｏａｒｄ配列に格納するＴＡＧ情報として使用される上位側ビット７１１とを含む。また、順序番号管理データ４３３に相当するｂｏａｒｄ配列７２０の各要素は、ＴＡＧ情報７２４と、ＲＥＵＳＥ７２１と、ＰＡＳＳＥＤ７２２とを格納する。ＰＡＳＳＥＤ７２２は、当該配列要素に対応する順序番号のスレッドが未終了であるため追い越されていることを示す１ビットのフラグである（詳細は後述する）。ＲＥＵＳＥ７２１は、追い越しが行われた配列要素に対応する順序番号のスレッドが終了したことを示す１ビットのフラグである（詳細は後述する）。７２３は、他の目的に使用可能なオプションビットであり、本実施形態では使用されない。ここで、ｂｏａｒｄ配列７２０は、その配列があらかじめ決められたアドレス空間に限定される。新たな配列要素は、ｂｏａｒｄ配列７２０のアドレス空間を巡回するように配置される。すなわち、処理状態管理部２１０は、スレッドの開始順からアドレスを計算し、そのアドレス位置に実行中のスレッドの状態を保持する、
データ表記
図７Ｂは、本実施形態で使用するデータ表記７３０を示す図である。データ表記７３０は、データ表記７３１に対応づけられたデータ内容７３２とデータの意味７３３とを含む。
ＴＡＧ（ｍｙｓｅｑ）およびＴＡＧ（ｂｏａｒｄ［ｉ］）７４０は、順序番号（ｍｙｓｅｑ）およびｂｏａｒｄ配列要素（ｂｏａｒｄ［ｉ］，ｉ＝０〜ＳＩＺＥ−１の値）から取得したＴＡＧ情報を示す。また、ＲＥＵＳＥ（ｓｔａｔｅ）７５０は、ｂｏａｒｄ配列要素もしくはその値のコピーを格納する変数（ｓｔａｔｅ）から取得したＲＥＵＳＥビットを示す。また、ＰＡＳＳＥＤ（ｓｔａｔｅ）７６０は、ｂｏａｒｄ配列要素もしくはその値のコピーを格納する変数（ｓｔａｔｅ）から取得したＰＡＳＳＥＤビットを示す。
ｂｏａｒｄ配列
図８Ａおよび図８Ｂとを参照して、図７Ａに示したｂｏａｒｄ配列７２０の構成例を説明する。なお、この２つの例はその特徴的な例であり、この例からｂｏａｒｄ配列７２０の構成と動作とが理解可能である。
図８Ａは、本実施形態に係るｂｏａｒｄ配列７２０の構成例８１０を示す図である。図８Ａは、ＯＦＦＳＥＴ（ｈｅａｄ）がＯＦＦＳＥＴ（ｔａｉｌ）を追い越さない状況におけるｂｏａｒｄ配列の一例である。ここで、ｔはＴＡＧ（ｈｅａｄ）である。
ここで、追い越しについて説明する。上述のように、ｂｏａｒｄ配列７２０は、その配列があらかじめ決められたアドレス空間に限定される。そのため、終了処理が未完了のｂｏａｒｄ配列要素が増加すると、ｂｏａｒｄ配列７２０のアドレス空間が、終了処理が未完了のｂｏａｒｄ配列要素によって占められてしまう。そこで、開始処理部４１１が呼び出されてインクリメントされたｈｅａｄに対応するｂｏａｒｄ配列要素は、ｂｏａｒｄ配列７２０のアドレス空間を巡回するように配置される。このとき、ＯＦＦＳＥＴ（ｈｅａｄ）がＯＦＦＳＥＴ（ｔａｉｌ）を「追い越す」と称する。追い越しとは、開始処理部４１１が呼び出されてインクリメントされたｈｅａｄに対応するｂｏａｒｄ配列要素が、終了処理未完了の状態であったという事象を意味している。
ＯＦＦＳＥＴ（ｈｅａｄ）がＯＦＦＳＥＴ（ｔａｉｌ）を追い越した状況では、ｈｅａｄとｔａｉｌの差がＳＩＺＥ以上になる。この場合、ｂｏａｒｄ配列の全要素が使用されている。ＯＦＦＳＥＴ（ｈｅａｄ）がＯＦＦＳＥＴ（ｔａｉｌ）を追い越した場合、その配列要素のＰＡＳＳＥＤビットがセットされる。そして、その配列要素に対応する順序番号のスレッドの終了処理が完了した場合、当該配列要素のＲＥＵＳＥビットがセットされる。
図８Ａに示すとおり、追い越しのない状況では、ｂｏａｒｄ配列で使用されている領域、すなわち、ＯＦＦＳＥＴ（ｔａｉｌ）からＯＦＦＳＥＴ（ｈｅａｄ）までの配列要素のＲＥＵＳＥビットとＰＡＳＳＥＤビットは、リセットされた状態（図では“０”と表記）である。また、ＴＡＧはｔもしくはｔ＋１である。ここでＴＡＧ値がｔの場合、開始処理部４１１によって付与された順序番号が返却されていない、すなわち、その順序番号を引数とした終了処理部４１２が呼び出されていないことを意味している。一方、ＴＡＧ値がｔ＋１の場合、開始処理部４１１によって付与された順序番号が返却されている、すなわち、その順序番号を引数とした終了処理部４１２が呼び出されたことを意味している。ここで、ｔａｉｌの移動について説明する。ｔａｉｌと等しい順序番号を引数とした終了処理部４１２が呼び出されると、ｔａｉｌの順序番号に対応するｂｏａｒｄ配列要素（ｂｏａｒｄ［ＯＦＦＳＥＴ｛ｔａｉｌ｝］）のＴＡＧは、ｔからｔ＋１に変更される。ｔａｉｌ＋１の順序番号に対応するｂｏａｒｄ配列要素（ｂｏａｒｄ［ＯＦＦＳＥＴ｛ｔａｉｌ＋１｝］，図８Ａではｔａｉｌの一行下）のＴＡＧは、図８Ａではｔ＋１となっており、既に終了処理が完了していることを示している。よって、終了処理部４１２により、ｔａｉｌは、その時点で終了処理の完了していない最も小さい番号であるｔａｉｌ＋２の位置（図８Ａでは「次のｔａｉｌ」と表記）に移動する。
図８Ｂは、本実施形態に係るｂｏａｒｄ配列の他の構成例８２０を示す図である。図８Ｂは、ＯＦＦＳＥＴ（ｈｅａｄ）がＯＦＦＳＥＴ（ｔａｉｌ）を追い越した状況、すなわち、ｈｅａｄとｔａｉｌの差がＳＩＺＥ以上になった場合を示す。この場合、ｂｏａｒｄ配列の全要素が使用されている。ここで、ｂｏａｒｄ［ＯＦＦＳＥＴ（ｈｅａｄ＋１）］から配列最終要素（ｂｏａｒｄ［ＳＩＺＥ−１］）において、ＴＡＧ値がｔ（＝ＴＡＧ（ｈｅａｄ））の場合、開始処理部４１１により付与された順序番号を引数とする終了処理が行なわれたことを示す。一方、ＴＡＧ値がｔ−１の場合は、開始処理部４１１により付与された順序番号を引数とする終了処理が行なわれていないことを示す。
上述したように、追い越しとは、開始処理部４１１が呼び出されてインクリメントされたｈｅａｄに対応するｂｏａｒｄ配列要素が、終了処理未完了状態であったという事象を意味している。このとき、ｂｏａｒｄ配列は、２巡目以降の配置となる。この場合、開始処理部４１１は、その配列要素のＰＡＳＳＥＤビットをセットし（図では“１”と表記）、ｈｅａｄに１を加えたのち開始処理部４１１を再度実行する。この場合、その配列要素に対応する順序番号は付与されない。
また、配列先頭要素（ｂｏａｒｄ［０］）からｂｏａｒｄ［ＯＦＦＳＥＴ（ｈｅａｄ）］までの領域では、ＴＡＧ値がｔ＋１（＝ＴＡＧ（ｈｅａｄ）＋１）の場合、開始処理部４１１により付与された順序番号を引数とする終了処理が行なわれたことを意味する。一方、ＴＡＧ値がｔの場合は、開始処理部４１１により付与された順序番号を引数とする終了処理が行なわれていないことを意味する。また、この領域でＴＡＧ値がｔ−１以下の場合、その配列要素に追い越し事象が発生したことを示している。その配列要素は、前記の操作により、ＰＡＳＳＥＤビットが設定された状態となっている。
このＰＡＳＳＥＤビットが“１”に設定された配列要素に対応する順序番号を引数とする終了処理は、ＲＥＵＳＥビットをセット（図では“１”と表記）することにより、その配列要素に対応する順序番号のスレッドの終了処理が完了していることを設定する。このような追い越し処理は、ＯＦＦＳＥＴ（ｈｅａｄ）がＯＦＦＳＥＴ（ｔａｉｌ）を２回以上追い越した状況、すなわち、ｈｅａｄとｔａｉｌの差がＳＩＺＥの２倍以上となった場合でも、同様に行なわれる。
情報処理装置のハードウェア構成
図９は、本実施形態に係る情報処理装置９００のハードウェア構成を示すブロック図である。図９は、本実施形態の並列スレッド処理と処理状態管理部とを実行するハードウェア構成例を示す。ただし、図９の構成は本実施形態の一例に過ぎず、並列スレッド処理と処理状態管理部とが、これらのデータおよびプログラムを一部を共有しながら一部を分散する等、様々な形態が実現可能である。
図９において、ＣＰＵ９１０−１〜９１０−ｎは、演算制御用のプロセッサであり、プログラムを実行することにより情報処理装置９００の各機能構成部を実現する。ＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）９２０は、初期データおよびプログラムなどの固定データおよびプログラムを記憶する。通信制御部９３０は、ネットワークを介して他のプロセッサや通信端末などとデータを送受信する。
ＲＡＭ９４０は、ＣＰＵ９１０−１〜９１０−ｎが一時記憶のワークエリアとして使用するランダムアクセスメモリである。ＲＡＭ９４０には、本実施形態の実現に必要なデータを記憶する領域が確保されている。４３１は、最大順序番号（ｈｅａｄ）である。４３２は、最小順序番号（ｔａｉｌ）である。
ＲＡＭ９４０は、図２にも示したリスト検索スレッド２０２、２０３、およびリスト要素削除スレッド２０１を記憶する。９４１は、リスト検索スレッド２０２の順序番号（ｍｙｓｅｑ）である。９４２は、リスト検索スレッド２０２の状態変数（ｓｔａｔｅ，ｎｅｗｖ）である。９４３は、リスト検索スレッド２０３の順序番号（ｍｙｓｅｑ）である。９４４は、リスト検索スレッド２０３の状態変数（ｓｔａｔｅ，ｎｅｗｖ）である。９４５は、リスト要素削除スレッド２０１が取得した最大順序番号である。９４６は、リスト要素削除スレッド２０１が問い合わせた最小順序番号比較の結果（終了／未終了）である。
ストレージ９５０には、データベースや各種のパラメータ、あるいは本実施形態の実現に必要な以下のデータまたはプログラムが記憶されている。６１０は、図６に定義された関数で表わされる操作ａｔｏｍｉｃ＿ｉｎｃ（＆ｖ）である。６２０は、図６に定義された関数で表わされる操作ａｔｏｍｉｃ＿ｃｍｐｘｃｈｇ（＆ｖ，ｏ，ｎ）である。６３０は、図６に定義された関数で表わされる操作ＯＦＦＳＥＴ（ｖ）である。７４０は、図７Ｂに定義された関数で表わされるデータＴＡＧ（ｍｙｓｅｑ）およびＴＡＧ（ｂｏａｒｄ［ｉ］）である。７５０は、図７Ｂに定義された関数あるいはポインタで表わされるデータＲＥＵＳＥ（ｓｔａｔｅ）である。７６０は、図７Ｂに定義された関数あるいはポインタで表わされるデータＰＡＳＳＥＤ（ｓｔａｔｅ）である。
ストレージ９５０には、以下のプログラムが格納される。９５１は、全体の処理を実行させる情報処理プログラムである。９５２は、情報処理プログラム９５１において使用されるリスト検索スレッドを実行するリスト検索処理プログラムである（図１０Ａ参照）。９５３は、情報処理プログラム９５１において使用されるリスト要素削除スレッドを実行するリスト要素削除処理プログラムである（図１０Ｂ参照）。なお、図９には、２つのスレッドしか示さず、他のスレッドに対応するプログラムは省略している。
９５４は、処理状態管理を司る処理状態管理プログラムである。９５５は、処理状態管理プログラム９５４において、開始処理を実行する開始処理モジュールである（図１１Ａおよび図１１Ｂ参照）。９５６は、処理状態管理プログラム９５４において、終了処理を実行する終了処理モジュールである（図１２Ａ乃至図１２Ｃ参照）。９５７は、処理状態管理プログラム９５４において、最大順序番号取得処理を実行する最大順序番号取得処理モジュールである（図１３参照）。９５８は、処理状態管理プログラム９５４において、最小順序番号比較処理を実行する最小順序番号比較処理モジュールである（図１４参照）。
図９においては、リスト検索スレッドおよびリスト要素削除スレッドと、各モジュールとが混在して処理されるように図示されている。しかし、図２に示すように、処理状態管理部２１０に関連するデータおよびプログラムを、リスト検索スレッドおよびリスト要素削除スレッドなどのデータ処理に関連するデータおよびプログラムと分離して、それぞれを独立して実行させてもよい。その場合には、例えば、プロセッサやＣＰＵに役割分担させる構成となる。
なお、図９には、本実施形態に必須なデータやプログラムのみが示されており、ＯＳなどの汎用のデータやプログラムは図示されていない。
入力インタフェース９６０は、各種入力機器からの入力データをインタフェースする。入力インタフェース９６０には、例えば、キーボード９６１や、ポインティングデバイス（ＰＤ）９６２や、記憶媒体９６３などが、接続可能である。また、出力インタフェース９７０は、処理データを出力する。出力インタフェース９７０には、例えば、表示部９７１やプリンタ９７２などが接続される。
図１に示す情報処理装置１００のスレッド制御部１０１およびデータ要素制御部１０２は、コンピュータにより実現した場合、図９に例示するハードウエア構成を有する。図９に示す構成は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９１０−１〜９１０−ｎ、ＲＯＭ９２０、通信制御部９３０、ＲＡＭ９４０、ストレージ９５０およびストレージ９５０に含まれるプログラムを備える。ＣＰＵ９１０−１〜９１０−ｎは、各種ソフトウエア・プログラム（コンピュータ・プログラム）を実行することにより、情報処理装置１００の全体的な動作を司る。本実施形態および以下に示す他の実施形態において、ＣＰＵ９１０−１〜９１０−ｎが、ＲＡＭ９４０等の記憶媒体を適宜参照しながら、情報処理装置１００が備える各機能（各部）のソフトウエア・プログラムを実行する。
より具体的には、ＣＰＵ９１０−１〜９１０−ｎは、ＲＡＭ９４０等の記憶媒体を適宜参照しながら、情報処理装置１００が備える、図４に示す処理状態管理部２１０の機能を実施するソフトウエア・プログラムを実行することにより、開始終了処理部４１０、終了判定部４２０および状態保持部４３０等のソフトウエア・プログラムを実行する。
リスト検索スレッドの処理手順
図１０Ａは、本実施形態に係る情報処理装置によるリスト検索スレッド２０２または２０３の処理手順を示すフローチャートである。
リスト検索スレッド２０２を実行する、例えばＣＰＵ９１０−１は、まず、開始処理部４１１を起動する。開始処理部４１１は、リスト検索処理を一意に識別する順序番号を取得する（ステップＳ１０１１）。続いて、ＣＰＵ９１０−１は、リスト検索を行う（ステップＳ１０１３）。リスト検索が終了すると、ＣＰＵ９１０−１は、終了処理部４１２を起動する。これにより、リスト検索スレッド２０２を実行するＣＰＵ９１０−１は、前記順序番号に対応付けられた処理が完了したことを処理状態管理部２１０に通知する（ステップＳ１０１５）。
リスト要素削除スレッドの処理手順
図１０Ｂは、本実施形態に係る情報処理装置によるリスト要素削除スレッド２０１の処理手順を示すフローチャートである。
リスト要素削除スレッド２０３を実行する、例えばＣＰＵ９１０−１は、まず、リスト構造データからデータ要素を削除する（ステップＳ１０２１）。続いて、ＣＰＵ９１０−１は、最大順序番号取得部４２１を起動する。最大順序番号取得部４２１は、その時点までに開始された検索処理に対応する順序番号の内、最大の順序番号を取得する（ステップＳ１０２３）。続いて、最大順序番号取得部４２１は、取得した最大順序番号を最小順序番号比較部４２２に通知する。最小順序番号比較部４２２は、取得した順序番号以下の番号に対応付けられた検索処理が完了しているかどうかを調べる（ステップＳ１０２５）。比較の結果、順序番号以下の番号に対応付けられた検索処理が完了していない場合、最小順序番号比較部４２２は、ステップＳ１０２５の最小順序番号比較処理を繰り返す。比較の結果、順序番号以下の番号に対応付けられた検索処理が完了している場合、最小順序番号比較部４２２は、削除したデータ要素を再利用可能状態にする（ステップＳ１０２７）。順序番号よりも小さい番号に対応付けられたすべての検索処理が完了していることは、削除したデータ要素を参照する可能性のあるスレッドが存在していないことを示す。
開始処理
図１１Ａおよび図１１Ｂは、図１０Ａに示した本実施形態に係る開始処理Ｓ１０１１の処理手順を示すフローチャートである。開始処理においては、この処理内でのみ使用される、ｂｏａｒｄ配列要素のコピーを格納する変数としてｓｔａｔｅが使用される。なお、図中、“／Ｘ”は、Ｘの否定を示す。また、“ａｃｔｕａｌ”は、不可分なｃｍｐｘｃｈｇ操作からの戻り値を示す。
開始処理部４１１は、まず、最大順序番号（ｈｅａｄ）に対して値“１”を不可分加算し、加算前の値を変数ｍｙｓｅｑに代入する（ステップＳ１１０１）。開始処理部４１１は、ｂｏａｒｄ配列のＯＦＦＳＥＴ（ｍｙｓｅｑ）番目の配列要素の値をｓｔａｔｅに代入する（ステップＳ１１０３）。開始処理部４１１は、変数ｓｔａｔｅのＲＥＵＳＥビットが“０”であり、かつｓｔａｔｅのＴＡＧ情報とｍｙｓｅｑのＴＡＧ情報とが等しいという条件が成立しているかどうかを調べる（ステップＳ１１０５）。ステップＳ１１０５の条件が成立している場合、開始処理部４１１は、戻り値をｍｙｓｅｑとして動作を終了する（ステップＳ１１０７）。
一方、ステップＳ１１０５の条件が成立していない場合、開始処理部４１１は、ｓｔａｔｅのＲＥＵＳＥビットを調べる（ステップＳ１１０９）。その結果、ＲＥＵＳＥビットが“０”でない場合（ステップＳ１１０９の判断がｙｅｓの場合）、開始処理部４１１は、ｓｔａｔｅのＴＡＧ情報とｍｙｓｅｑのＴＡＧ情報とが等しいかどうかを調べる（ステップＳ１１１１）。これらの値が等しい場合、開始処理部４１１は、処理をステップＳ１１０１に戻す。また、両者が異なる場合、開始処理部４１１は、ｂｏａｒｄ配列のＯＦＦＳＥＴ（ｍｙｓｅｑ）番目の配列要素の値を、値ｓｔａｔｅからＴＡＧ（ｍｙｓｅｑ）に変更する不可分なｃｍｐｘｃｈｇ操作を実施する（ステップＳ１１１３）。そして、開始処理部４１１は、そのｃｍｐｘｃｈｇ操作が成功したかどうかを調べる（ステップＳ１１１５）。ｃｍｐｘｃｈｇ操作が成功した場合、開始処理部４１１は、ステップＳ１１０７以降の処理を実行する。一方、ｃｍｐｘｃｈｇ操作が失敗した場合、開始処理部４１１は、ｃｍｐｘｃｈｇ操作実行時においてｂｏａｒｄ配列のＯＦＦＳＥＴ（ｍｙｓｅｑ）番目の配列要素に格納されていた値をｓｔａｔｅに代入する（ステップＳ１１２３）。そして、開始処理部４１１は、ステップＳ１１０５以降の処理を実行する。
ステップＳ１１０９において、ＲＥＵＳＥビットが“０”であった場合（ステップＳ１１０９の判断がｎｏの場合）、開始処理部４１１は、ｓｔａｔｅのＰＡＳＳＥＤビットを調べる（ステップＳ１１１７）。その結果、ＰＡＳＳＥＤビットが“０”でない場合（ステップＳ１１１７の判断がｎｏの場合）、開始処理部４１１は、処理をステップＳ１１０１に戻す。一方、ＰＡＳＳＥＤビットが“０”の場合（ステップＳ１１１７の判断がｙｅｓの場合）、開始処理部４１１は、ｂｏａｒｄ配列のＯＦＦＳＥＴ（ｍｙｓｅｑ）番目の配列要素の値を、値ｓｔａｔｅから、ｓｔａｔｅにＰＡＳＳＥＤフラグを設定した値に変更する不可分なｃｍｐｘｃｈｇ操作を実施する（ステップＳ１１１９）。そして、開始処理部４１１は、そのｃｍｐｘｃｈｇ操作が成功したかどうかを調べる（ステップＳ１１２１）。ｃｍｐｘｃｈｇ操作が成功した場合、開始処理部４１１は、処理をステップＳ１１０１に戻す。一方、ｃｍｐｘｃｈｇ操作が失敗した場合、開始処理部４１１は、ｃｍｐｘｃｈｇ操作の実行時においてｂｏａｒｄ配列のＯＦＦＳＥＴ（ｍｙｓｅｑ）番目の配列要素に格納されていた値をｓｔａｔｅに代入する（ステップＳ１１２３）。そして、開始処理部４１１は、ステップＳ１１０５以降の処理を実行する。
終了処理
図１２Ａ乃至図１２Ｃは、図１０Ａに示した本実施形態に係る終了処理Ｓ１０１５の処理手順を示すフローチャートである。終了処理においては、この処理内でのみ使用される、ｂｏａｒｄ配列要素のコピーを格納する変数としてｓｔａｔｅおよびｎｅｗｖが使用される。なお、図中、“／Ｘ”は、Ｘの否定を表す。また、“ａｃｔｕａｌ”は、不可分なｃｍｐｘｃｈｇ操作からの戻り値を示す。
終了処理部４１２は、まず、ｂｏａｒｄ配列のＯＦＦＳＥＴ（ｍｙｓｅｑ）番目の配列要素をｓｔａｔｅに代入する（ステップＳ１２０１）。次に、終了処理部４１２は、ｓｔａｔｅのＰＡＳＳＥＤビットを調べる（ステップＳ１２０３）。その結果、ＰＡＳＳＥＤビットが“０”の場合（ステップＳ１２０３の判断がｙｅｓの場合）、終了処理部４１２は、ｓｔａｔｅに“１”を加えた値をｎｅｗｖに設定する（ステップＳ１２０５）。また、ＰＡＳＳＥＤビットが“０”でない場合（ステップＳ１２０３の判断がｎｏの場合）、終了処理部４１２は、ｓｔａｔｅに対してＲＥＵＳＥビットを設定した値をｎｅｗｖに設定する（ステップＳ１２０７）。ステップＳ１２０３の判定がいずれの場合も、終了処理部４１２は、ｂｏａｒｄ配列のＯＦＦＳＥＴ（ｍｙｓｅｑ）番目の配列要素の値を、値ｓｔａｔｅから、ｎｅｗｖに変更する不可分なｃｍｐｘｃｈｇ操作を実施する（ステップＳ１２０９）。そして、終了処理部４１２は、そのｃｍｐｘｃｈｇ操作が成功したかどうかを調べる（ステップＳ１２１１）。
ｃｍｐｘｃｈｇ操作が失敗した場合、終了処理部４１２は、ｃｍｐｘｃｈｇ操作実行時においてｂｏａｒｄ配列のＯＦＦＳＥＴ（ｍｙｓｅｑ）番目の配列要素に格納されていた値をｓｔａｔｅに代入すいる（ステップＳ１２１３）。そして、終了処理部４１２は、ステップＳ１２０３以降の処理を実行する。一方、ｃｍｐｘｃｈｇ操作が成功した場合、終了処理部４１２は、ｍｙｓｅｑとｔａｉｌとの値が等しいかどうかを調べる（ステップＳ１２１５）。両者の値が異なる場合、終了処理部４１２は、動作を終了する。両者の値が一致している場合、終了処理部４１２は、ｔａｉｌに“１”を加えるため不可分なｃｍｐｘｃｈｇ操作を実施し（ステップＳ１２１７）、そのｃｍｐｘｃｈｇ操作が成功したかどうかを調べる（ステップＳ１２１９）。ｃｍｐｘｃｈｇ操作が失敗した場合、終了処理部４１２は、動作を終了する。
一方、ステップＳ１２１９のｃｍｐｘｃｈｇ操作が成功した場合、終了処理部４１２は、ｍｙｓｅｑ値に“１”を加え（ステップＳ１２２１）、ｂｏａｒｄ配列のＯＦＦＳＥＴ（ｍｙｓｅｑ）番目の配列要素に格納されていた値をｓｔａｔｅに代入する（ステップＳ１２２３）。続いて、終了処理部４１２は、変数ｓｔａｔｅのＲＥＵＳＥビットが“０”であり、かつｓｔａｔｅのＴＡＧ情報とｍｙｓｅｑのＴＡＧ情報とが等しいという条件が成立しているかどうかを調べる（ステップＳ１２２５）。その結果、ステップＳ１２２５の条件が成立している場合、終了処理部４１２は、動作を終了する。また、ステップＳ１２２５の条件が成立していない場合、終了処理部４１２は、変数ｓｔａｔｅのＲＥＵＳＥビットが“０”でなく、かつ、ｓｔａｔｅのＴＡＧ情報とｍｙｓｅｑのＴＡＧ情報とが異なっているという条件が成立しているかどうかを調べる（ステップＳ１２２７）。その結果、ステップＳ１２２７の条件が成立していない場合、終了処理部４１２は、ステップＳ１２１５以降の処理を実行する。
一方、ステップＳ１２２７の条件が成立している場合、終了処理部４１２は、ｂｏａｒｄ配列のＯＦＦＳＥＴ（ｍｙｓｅｑ）番目の配列要素の値を、値ｓｔａｔｅから、ｍｙｓｅｑのＴＡＧ値にＲＥＵＳＥビットとＰＡＳＳＥＤビットとを設定した値に変更する、不可分なｃｍｐｘｃｈｇ操作を実施する（ステップＳ１２２９）。そして、終了処理部４１２は、そのｃｍｐｘｃｈｇ操作が成功したかどうかを調べる（ステップＳ１２３１）。ｃｍｐｘｃｈｇ操作が成功した場合、終了処理部４１２は、処理をステップＳ１２１５に戻す。一方、ｃｍｐｘｃｈｇ操作が失敗した場合、終了処理部４１２は、ｃｍｐｘｃｈｇ操作実行時においてｂｏａｒｄ配列のＯＦＦＳＥＴ（ｍｙｓｅｑ）番目の配列要素に格納されていた値のＴＡＧ値とｍｙｓｅｑのＴＡＧ情報を比較する（ステップＳ１２３３）。その結果、これらの値が異なる場合、終了処理部４１２は、処理をステップＳ１２１５に戻す。これらの値が等しい場合、終了処理部４１２は、動作を終了する。
最大順序番号取得処理
図１３は、図１０Ｂに示した本実施形態に係る最大順序番号取得処理Ｓ１０２３の処理手順を示すフローチャートである。
最大順序番号取得部４２１は、起動すると、起動時におけるｈｅａｄの値を取得する。そして、最大順序番号取得部４２１は、取得したｈｅａｄの値を戻り値とし、動作を終了する（ステップＳ１３０１）。
最小番号比較処理
図１４は、図１０Ｂに示した本実施形態に係る最小番号比較処理Ｓ１０２５の処理手順を示すフローチャートである。
最小順序番号比較部４２２は、まず、引数として渡されたｍｙｓｅｑ値と起動時におけるｔａｉｌの値を比較する（ステップＳ１４０１）。その結果、ｔａｉｌ値とｍｙｓｅｑ値とが等しい、もしくは、ｔａｉｌ値の方が大きい場合、最小順序番号比較部４２２は、戻り値を真（ｔｒｕｅ）として、動作を終了する（ステップＳ１４０３）。一方、ｔａｉｌ値の方がｍｙｓｅｑ値より小さい場合、最小順序番号比較部４２２は、戻り値を偽（ｆａｌｓｅ）として、動作を終了する（ステップＳ１４０５）。
なお、順序番号を計算機で扱うことのできる整数値として表現することに関係する既存技術として、物理的な表現に関する数値のオーバフローを考慮に入れた大小比較方法が存在している。一例として、Ｌｉｎｕｘ  ｋｅｒｎｅｌのｓｏｕｒｃｅ  ｃｏｄｅでは、＃ｄｅｆｉｎｅＵＩＮＴ＿ＣＭＰ＿ＬＴ（ａ，ｂ）（ＵＩＮＴ＿ＭＡＸ／２  ＜（ａ）−（ｂ））というマクロ定義がある（ＵＩＮＴ＿ＭＡＸはＵＩＮＴ型で表現可能な数値の最大値）。本実施形態における順序番号の比較操作として、このようなオーバフローを考慮に入れた２つの整数値の大小比較方法を採用することにより、順序番号のオーバフローを許容する。すなわち、物理的な表現ではオーバフロー発生時に順序番号値は減少するが、論理的には一意に増加していると解釈できる順序番号を使用した処理状態管理も、本発明に含まれる。
第３実施形態
次に、本発明の第３実施形態に係る情報処理システムについて説明する。
情報処理システムの構成
図１５は、本実施形態に係る情報処理システム１５００の構成を示すブロック図である。
図１５に示すように、プロセッサＡ１５１０およびプロセッサＢ１５２０は、同じ記憶部１５３０を共有して、処理を実行する。図１５では、プロセッサＡ１５１０がリスト要素削除スレッド１５１１を実行している。同時に、プロセッサＢ１５２０が、リスト検索スレッド１５２１を並列的に実行している。
本実施形態に係る情報処理システムは、上記第２実施形態と比べると、各プロセッサが状態保持部を共有する一方で、それぞれが処理状態管理をする点で異なる。その他の構成および動作は、第２実施形態と同様であるため、詳しい説明を省略する。
かかる処理環境では、１つの処理状態管理部が、複数のプロセッサが処理する複数のスレッドの管理を行ったり、各スレッドからの問合せを処理したりすることは、オーバーヘッドが大きくなる。したがって、図１５に示す情報処理システム１５００においては、各プロセッサが、（状態保持部を除く）開始終了処理部４１０と終了判定部４２０とを有する処理状態管理部１５１２と１５２２とを備える。状態保持部１５３２は、プロセッサおよびスレッドにより共有されて使用されるため、リスト構造化されたデータ１５３１と共に記憶部１５３０に格納される。
本実施形態によれば、各プロセッサによる分散管理によって、リスト構造化されたデータからのデータ要素の削除が、実行中のスレッドに影響を与えることなく、削除されたデータ要素を迅速に再利用可能状態にすることができる。
なお、各プロセッサが状態保持部を備えると共に、該状態保持部が常に同一情報を有するように構成されてもよい。
他の実施形態
以上、本発明の実施形態について詳述したが、それぞれの実施形態に含まれる別々の特徴を如何様に組み合わせたシステムまたは装置も、本発明の範疇に含まれる。
本発明によれば、複数のスレッドが並列的に複数のデータ要素を、リストなどの構造データに動的に挿入または削除することのできる情報処理システムにおいて、削除したデータ要素が再利用可能か否かの判定を速やかに、かつ、効率的に行なうことのできる他の用途に適用できる。
また、本発明は、複数の機器から構成されるシステムに適用されてもよいし、単体の装置に適用されてもよい。さらに、本発明は、実施形態の機能を実現する制御プログラムが、システムあるいは装置に直接あるいは遠隔から供給される場合にも適用可能である。したがって、本発明の機能をコンピュータで実現するために、コンピュータにインストールされる制御プログラム、あるいはその制御プログラムを格納した媒体、その制御プログラムをダウンロードさせるＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）サーバも、本発明の範疇に含まれる。
なお、上述した実施形態を例に説明した本発明は、上述した情報処理装置を、図９に示すＣＰＵ９１０−１〜９１０−ｎが実行する一例として、ソフトウエア・プログラムによって実現する場合について説明した。しかしながら、図１、図２、図４および図１５に示す各ブロックに示す機能は、一部または全部を、ハードウエアとして実現してもよい。
また、上述した実施形態を例に説明した本発明は、上述した情報処理装置９００に対して、その説明において参照したフローチャート（図１０Ａないし図１４）の機能を実現可能なコンピュータ・プログラムを供給した後、そのコンピュータ・プログラムを、情報処理装置９００のＣＰＵ９１０−１〜９１０−ｎに読み出して実行することによって達成される。
また、係る供給されたコンピュータ・プログラムは、読み書き可能なメモリ（一時記憶媒体）またはハードディスク装置等のコンピュータ読み取り可能な記憶デバイスに格納すればよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムを表すコード或いは係るコンピュータ・プログラムを格納した記憶媒体によって構成されると捉えることができる。
【産業上の利用可能性】
【０００６】
本発明は、例えば、複数のスレッドを並列的に実行する情報処理装置に適用できる。
実施形態の他の表現
上記の実施形態の一部または全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
複数のスレッドを開始するに際して、各スレッドに識別子を付与し、前記各スレッドの終了に際して、前記識別子を伴って終了を通知するスレッド制御手段と、
リスト構造化されたデータからデータ要素を削除する削除スレッドが実行された場合に、前記識別子を伴った終了の通知により前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が確認されるまで、前記削除されたデータ要素の内容を変更できない状態に維持し、前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が前記識別子を伴って通知されている場合、前記削除されたデータ要素を再利用可能な状態にするデータ要素制御手段と
を備える情報処理装置。
（付記２）
前記スレッド制御手段は、前記削除スレッドによる削除処理の完了時点における最新スレッドの識別子を取得し、
前記データ要素制御手段は、前記最新スレッドおよびそれ以前に実行を開始したすべてのスレッドが終了したか否かの問い合わせに応答して、前記スレッド制御手段によって前記最新スレッドおよびそれ以前に実行を開始したすべてのスレッドの終了が前記識別子を伴って通知されているか否かを調べ、前記終了が通知されている場合は、削除されたデータ要素を再利用可能状態にする付記１に記載の情報処理装置。
（付記３）
前記スレッド制御手段は、前記削除スレッドを除く、前記リスト構造化されたデータをアクセスする検索スレッドの開始に際して、識別子を付与し、前記検索スレッドの終了に際して、前記識別子を伴って終了を通知する付記１または２に記載の情報処理装置。
（付記４）
前記スレッド制御手段は、前記検索スレッドの検索処理の開始に際して、当該検索スレッドに識別子を付与し、前記検索スレッドの終了に際して、当該検索スレッドから、前記識別子を受け取る付記３に記載の情報処理システム。
（付記５）
前記スレッド制御手段は、
前記識別子に含まれる開始順に基づいてアドレスを計算し、そのアドレス位置に実行中のスレッドの状態を保持する状態保持手段をさらに備え、
前記状態保持手段に格納される、前記識別子に対応するスレッドの終了を示す情報を制御し、
前記データ要素制御手段は、前記状態保持手段に格納される、前記識別子に対応するスレッドの終了を示す情報に基づいて、削除されたデータ要素が再利用可能かどうかを決定する付記１乃至３のいずれか１項に記載の情報処理装置。
（付記６）
前記状態保持手段は、あらかじめ決められたアドレス空間を有し、スレッドの開始順に前記アドレス空間を巡回するように各スレッドの状態を示す配列要素を保持し、
各配列要素は、
２巡目以降において、終了が通知されていないスレッドに対応する配列要素に対して追い越しが行なわれたことを示すフラグと、
前記追い越しが行なわれた配列要素に対応するスレッドの終了が通知されたことを示すフラグとを含む
付記４に記載の情報処理装置。
（付記７）
前記スレッド制御手段は、
最後に開始されたスレッドに付与された識別子である最大順序番号と、それ以前のスレッドがすべて終了しているスレッドの順序番号である最小順序番号と、各スレッドの開始および終了を示す情報を含む順序番号管理データとを保持する状態保持手段と、
開始されたスレッドに対して一意に増加する順序番号を付与する開始処理部と、順序番号に対応するスレッドが終了したことを順序番号管理データに反映する終了処理部とを含む開始終了処理手段とを備え、
前記リスト構造化されたデータをアクセスする検索スレッドの検索処理の開始に際して前記開始処理部を呼び出し、前記検索スレッドの検索処理の終了に際して前記終了処理部を呼び出し、
前記データ要素制御手段は、
前記削除スレッドからの要求に応答して、前記状態保持手段から前記最大順序番号を取得してそれを返す最大順序番号取得部と、前記削除スレッドから取得した最大順序番号と前記状態保持手段に保持された最小順序番号とを比較する最小順序番号比較部とを含む終了判定手段とを備え、
前記削除スレッドのデータ要素の削除処理の後に前記最大順序番号取得部と前記最小順序番号比較部とを呼び出すことにより、前記削除スレッドが削除したデータ要素が再利用可能かどうかの判定を実施する付記１ないし５のいずれか１項記載の情報処理装置。
（付記８）
リスト構造化されたデータの検索を行う検索スレッドと、リスト構造化されたデータからデータ要素を削除する削除スレッドとを実行する処理手段と、
前記処理手段による複数のスレッドの実行を管理する処理状態管理手段とを備え、
前記処理状態管理手段は、
最後に開始されたスレッドに付与された識別子である最大順序番号と、それ以前のスレッドがすべて終了しているスレッドの順序番号である最小順序番号と、各スレッドの開始および終了を示す情報を含む順序番号管理データとを保持する状態保持手段と、
開始されたスレッドに対して一意に増加する順序番号を付与する開始処理部と、順序番号に対応するスレッドが終了したことを順序番号管理データに反映する終了処理部とを含む開始終了処理手段とを備え、
前記削除スレッドからの要求に応答して、前記状態保持手段から前記最大順序番号を取得してそれを返す最大順序番号取得部と、前記削除スレッドから取得した最大順序番号と前記状態保持手段に保持された最小順序番号とを比較する最小順序番号比較部とを含む終了判定手段とを備え、
前記検索スレッドの検索処理の開始に際して前記開始処理部を呼び出し、前記検索スレッドの検索処理の終了に際して前記終了処理部を呼び出し、
前記削除スレッドのデータ要素の削除処理の後に前記最大順序番号取得部と前記最小順序番号比較部とを呼び出すことにより、前記削除スレッドが削除したデータ要素が再利用可能かどうかの判定を実施する情報処理システム。
（付記９）
複数のスレッドを開始するに際して、各スレッドに識別子を付与し、
前記各スレッドの終了に際して、前記識別子を伴って終了を通知し、
リスト構造化されたデータからデータ要素を削除する削除スレッドが実行される場合に、前記識別子を伴った終了の通知により前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が確認されるまで、前記削除されたデータ要素の内容を変更できない状態に維持し、
前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が前記識別子を伴って通知されている場合、前記削除されたデータ要素を再利用可能な状態にする情報処理方法。
（付記１０）
最後に開始されたスレッドに付与された識別子である最大順序番号と、それ以前のスレッドがすべて終了しているスレッドの順序番号である最小順序番号と、各スレッドの開始および終了を示す情報を含む順序番号管理データとを、状態保持手段に保持し、
開始されたスレッドに対して一意に増加する順序番号を付与し、
スレッドからの終了の通知を受けて、順序番号に対応するスレッドが終了したことを順序番号管理データに反映し、
リスト構造化されたデータからデータ要素を削除する削除スレッドからの要求に応答して、前記状態保持手段から前記最大順序番号を取得してそれを返し、
前記削除スレッドから取得した最大順序番号と、前記最小順序番号とを比較して、前記最大順序番号と前記最小順序番号とが一致する場合、または前記最大順序番号が前記最小順序番号よりも大きい場合に、前記削除スレッドが削除したデータ要素を再利用可能な状態にする請求項８記載の情報処理方法。
（付記１１）
複数のスレッドを開始するに際して、各スレッドに識別子を付与する処理と、
前記各スレッドの終了に際して、前記識別子を伴って終了を通知する処理と、
リスト構造化されたデータからデータ要素を削除する削除スレッドが実行される場合に、前記識別子を伴った終了の通知により前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が確認されるまで、前記削除されたデータ要素の内容を変更できない状態に維持する処理と、
前記削除スレッドの削除処理以前に開始したすべてのスレッドの終了が前記識別子を伴って通知されている場合、前記削除されたデータ要素を再利用可能な状態にする処理と
をコンピュータに実行させる制御プログラムを記録する制御プログラム記録媒体。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解しうる様々な変更をすることができる。
この出願は、２０１１年７月２９日に出願された日本出願特願２０１１−１６７６９１を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０００７】
１００  情報処理システム
１０１  スレッド制御部
１０２  データ要素制御部
２１０  処理状態管理部
２２０  記憶部
４１０  処理状態管理部
４２０  終了判定部
４３０  状態保持部
４１１  開始処理部
４１２  終了処理部
４２１  最大順序番号取得部
４２２  最小順序番号比較部
４３１  最大順序番号
４３２  最小順序番号
４３３  順序番号管理データ
【図１】
0006036692.tif 000002
【図２】
0006036692.tif 000003
【図３】
0006036692.tif 000004
【図４】
0006036692.tif 000005
【図５】
0006036692.tif 000006
【図６】
0006036692.tif 000007
【図７Ａ】
0006036692.tif 000008
【図７Ｂ】
0006036692.tif 000009
【図８Ａ】
0006036692.tif 000010
【図８Ｂ】
0006036692.tif 000011
【図９】
0006036692.tif 000012
【図１０Ａ】
0006036692.tif 000013
【図１０Ｂ】
0006036692.tif 000014
【図１１Ａ】
0006036692.tif 000015
【図１１Ｂ】
0006036692.tif 000016
【図１２Ａ】
0006036692.tif 000017
【図１２Ｂ】
0006036692.tif 000018
【図１２Ｃ】
0006036692.tif 000019
【図１３】
0006036692.tif 000020
【図１４】
0006036692.tif 000021
【図１５】
0006036692.tif 000022