(57)【要約】  【課題】  複数のメッセージキューを持たないスレッドを有するマルチスレッドに対応したＯＳにおいて、スレッド間通信効率を向上させることを目的とする。  【解決手段】  スレッドに任意に割り付け可能な共通メッセージキューおよび、共通メッセージキューに任意に割り付け可能なメッセージバッファを有することにより、複数のメッセージキューを持たないスレッドを有するマルチスレッドに対応したＯＳにおいても、スレッドが通信するメッセージの自由度が高まり、スレッド間通信効率を向上させることができる。【選択図】図１
2005352793.tif 000002
【特許請求の範囲】
【請求項１】
１つのスレッドに対して１つのオペレーティングシステム固有メッセージキューを割り当てるオペレーティングシステム上で動作し、複数のスレッドを備えるプロセスにおけるスレッド間通信方法であって、
前記プロセスに各スレッドが共通に使用可能な複数の共通メッセージキューを管理するメッセージキュー管理機能を実装し、
前記複数の共通メッセージキューの内で未使用の共通メッセージキューを検出する工程と、
前記スレッドの要求に応じて任意の数の前記共通メッセージキューを割り当てる工程と、
送信先となる前記共通メッセージキューを指定して、メッセージを送信する工程と
を有し、前記スレッドが複数のメッセージキューを要するときには前記メッセージキュー管理機構により１または複数の共通メッセージキューを割り当て、任意の１または複数の前記共通メッセージキューを用いて、スレッド間のメッセージの通信を行うことを特徴とするスレッド間通信方法。
【請求項２】
前記スレッドに割り当てられた前記共通メッセージキューが不要となったときに、前記割り当てられたメッセージキューを前記メッセージキュー管理機構へと割り当てなおす工程をさらに有することを特徴とする請求項１記載のスレッド間通信方法。
【請求項３】
前記プロセスが、各メッセージキューが共通に使用可能な複数のメッセージバッファを管理するメッセージバッファ管理機能をさらに実装しており、
前記メッセージを送信する工程が、
前記複数のメッセージバッファの内で未使用のメッセージバッファを検出する工程と、
前記検出したメッセージバッファにメッセージを格納する工程と、
前記メッセージを格納したメッセージバッファを送信先となる前記共通メッセージキューに割り当てる工程と
を有することを特徴とする請求項１記載のスレッド間通信方法。
【請求項４】
割り当て可能な前記共通メッセージキューは、次に参照される共通メッセージキューを参照することにより順番に並べられ、前記メッセージキュー管理機能は前記順番に並べられた共通メッセージキューの内の先頭と終端の共通メッセージキューを参照することにより全ての割り当て可能な共通メッセージキューを管理し、前記スレッドは割り当てられる共通メッセージキューの先頭と終端を参照しており、
前記共通メッセージキューを割り当てる工程が、
すでに割り当てられた共通メッセージキューがある場合に前記スレッドが参照している終端の共通メッセージキューを開放する工程と、
前記メッセージキュー管理機能が参照している先頭の共通メッセージキューを開放する工程と、
前記スレッドに割り当てる１または２以上の連続して参照される共通メッセージキューの終端の共通メッセージキューが次に参照する共通メッセージキューの参照を開放する工程と、
すでに割り当てられた共通メッセージキューがある場合に開放した共通メッセージキューが次に参照する共通メッセージキューとして前記スレッドに割り当てる１または２以上の連続して参照される共通メッセージキューの先頭の共通メッセージキューを参照する工程と、
前記スレッドが前記スレッドに割り当てる１または２以上の連続して参照される共通メッセージキューを含む前記スレッドが参照する全ての共通メッセージキューの先頭および終端の共通メッセージキューを参照する工程と、
前記メッセージキュー管理機能が残った共通メッセージキューの内先頭の共通メッセージキューを参照する工程と
を有し、前記スレッドおよび前記メッセージキュー管理機能並びに各共通メッセージキューの参照先を変更することで、前記スレッドへの１または２以上の共通メッセージキューの割り当ておよび前記メッセージキュー管理機能の前記共通メッセージキューの管理を行うことを特徴とする請求項１または請求項２のいずれかに記載のスレッド間通信方法。
【請求項５】
割り当て可能な前記メッセージバッファは、次に参照されるメッセージバッファを参照することにより順番に並べられ、前記メッセージバッファ管理機能は前記順番に並べられたメッセージバッファの内の先頭と終端のメッセージバッファを参照することにより全ての割り当て可能なメッセージバッファを管理し、前記共通メッセージキューは割り当てられるメッセージバッファの先頭と終端を参照しており、
前記メッセージバッファを割り当てる工程が、
すでに割り当てられたメッセージバッファがある場合に前記共通メッセージキューが参照している終端のメッセージバッファを開放する工程と、
前記メッセージバッファ管理機能が参照している先頭のメッセージバッファを開放する工程と、
前記共通メッセージキューに割り当てる１または２以上の連続して参照されるメッセージバッファの終端のメッセージバッファが次に参照するメッセージバッファの参照を開放する工程と、
すでに割り当てられたメッセージバッファがある場合に開放したメッセージバッファが次に参照するメッセージバッファとして前記共通メッセージキューに割り当てる１または２以上の連続して参照されるメッセージバッファの先頭のメッセージバッファを参照する工程と、
前記共通メッセージバッファが前記共通メッセージバッファに割り当てる１または２以上の連続して参照されるメッセージバッファを含む前記共通メッセージバッファが参照する全てのメッセージバッファの先頭および終端のメッセージバッファを参照する工程と、
前記メッセージバッファ管理機能が残ったメッセージバッファの内先頭のメッセージバッファを参照する工程と
を有し、前記共通メッセージバッファおよび前記メッセージバッファ管理機能並びに各メッセージバッファの参照先を変更することで、前記共通メッセージバッファへの１または２以上のメッセージバッファの割り付けおよび前記メッセージバッファ管理機能の前記メッセージバッファの管理を行うことを特徴とする請求項２または請求項３のいずれかに記載のスレッド間通信方法。
【請求項６】
割り当てることができる共通メッセージキューの数が無制限であることを特徴とする請求項１または請求項２または請求項３または請求項４のいずれかに記載のスレッド間通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッド機能をサポートしているオペレーティングシステム（以下ＯＳと称す）上で動作するスレッド間のメッセージ通信方法に関する。
【背景技術】
【０００２】
従来の、複数のキューを持たないスレッドを有するＯＳの例として、マルチスレッド対応のＯＳの１つであるＭｉｃｒｏｓｏｆｔ社のＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）（以下、Ｗｉｎｄｏｗｓ（登録商標）と称す）を例に挙げて、図２５，図２６を用いて説明する。
【０００３】
図２５はＷｉｎｄｏｗｓ（登録商標）におけるスレッド構成を示す図、図２６はＷｉｎｄｏｗｓ（登録商標）におけるメッセージのフローを示す図である。
Ｗｉｎｄｏｗｓ（登録商標）では、図２５に示すように、スレッドはスケジューリングの単位として管理するプリエンプティブなマルチタスクとして提供され、Ｗｉｎｄｏｗｓ（登録商標）においてスレッドはスケジューリングの最小単位として定義されている。このプリエンプティブなマルチタスクにおいては、ＯＳがプロセス管理の全権を掌握している。ここでプロセスとは、Ｗｉｎｄｏｗｓ（登録商標）においてはプログラムの実行単位として定義されるものである。ＯＳはプロセス生成時にプライマリスレッドと呼ばれるスレッドをプロセス内に生成しスケジューリングを行う。つまり、プロセス内には少なくとも１つのスレッドが存在する。またプロセスは、プライマリスレッド以外の任意のスレッドも生成することができる。
【０００４】
これら任意のスレッド間通信の方式として、メッセージシステムが提供されている。Ｗｉｎｄｏｗｓ（登録商標）では、このメッセージシステムを利用するにあたり、図２６に示すように、スレッド単位でメッセージキューが割り当てられる。
【０００５】
このメッセージシステムにおいて、メッセージ種類として、
・マウス、キーボード、ネットワークなどの各種デバイスからのメッセージ
・Ｗｉｎｄｏｗｓ（登録商標）システムからのメッセージ
・各種プロセスからのメッセージ
の３種類のメッセージカテゴリに分けられる。前記３種類のメッセージカテゴリで発生したメッセージは、前記スレッド単位に割り当てられるメッセージキューへと送られる。つまり、これらのメッセージはスレッド単位における唯一のメッセージキューへと送られ処理される。
【０００６】
また、プロセス間で共有可能な共有メモリに同期オブジェクトを有することにより、異なるプロセス間でのメッセージ通信を実現するものもある（例えば、特許文献１参照）。
【特許文献１】特開平９−１０１９０１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来の複数のメッセージキューを持たないスレッドにおけるスレッド間でのメッセージ通信方式では、Ｗｉｎｄｏｗｓ（登録商標）でのメッセージ通信方式を例に説明したように、複数のカテゴリのメッセージは、単一のスレッドが保持する唯一のメッセージキューへの送信されるため、仮にプログラム独自に定義されたメッセージを他のメッセージより優先的に処理したいような場合に対処することができないという問題点を有していた。
【０００８】
また、前記特許文献１で示される手法では、メッセージキューに対し受信可能なメッセージ数に制限を設けているため、メッセージキューが飽和状態になった場合にメッセージキューがそれ以上メッセージを受信することができなくなるという問題点を有していた。
【０００９】
上記問題点を解決するために、本発明は、複数のメッセージキューを持たないスレッドを有するマルチスレッドに対応したＯＳにおいて、スレッド間通信効率を向上させることを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために、本発明の請求項１記載のスレッド間通信方法は、１つのスレッドに対して１つのオペレーティングシステム固有メッセージキューを割り当てるオペレーティングシステム上で動作し、複数のスレッドを備えるプロセスにおけるスレッド間通信方法であって、前記プロセスに各スレッドが共通に使用可能な複数の共通メッセージキューを管理するメッセージキュー管理機能を実装し、前記複数の共通メッセージキューの内で未使用の共通メッセージキューを検出する工程と、前記スレッドの要求に応じて任意の数の前記共通メッセージキューを割り当てる工程と、送信先となる前記共通メッセージキューを指定して、メッセージを送信する工程とを有し、前記スレッドが複数のメッセージキューを要するときには前記メッセージキュー管理機構により１または複数の共通メッセージキューを割り当て、任意の１または複数の前記共通メッセージキューを用いて、スレッド間のメッセージの通信を行うことを特徴とする。
【００１１】
請求項２記載のスレッド間通信方法は、請求項１記載のスレッド間通信方法において、前記スレッドに割り当てられた前記共通メッセージキューが不要となったときに、前記割り当てられたメッセージキューを前記メッセージキュー管理機構へと割り当てなおす工程をさらに有することを特徴とする。
【００１２】
請求項３記載のスレッド間通信方法は、請求項１記載のスレッド間通信方法において、前記プロセスが、各メッセージキューが共通に使用可能な複数のメッセージバッファを管理するメッセージバッファ管理機能をさらに実装しており、前記メッセージを送信する工程が、前記複数のメッセージバッファの内で未使用のメッセージバッファを検出する工程と、前記検出したメッセージバッファにメッセージを格納する工程と、前記メッセージを格納したメッセージバッファを送信先となる前記共通メッセージキューに割り当てる工程とを有することを特徴とする。
【００１３】
請求項４記載のスレッド間通信方法は、請求項１または請求項２のいずれかに記載のスレッド間通信方法において、割り当て可能な前記共通メッセージキューは、次に参照される共通メッセージキューを参照することにより順番に並べられ、前記メッセージキュー管理機能は前記順番に並べられた共通メッセージキューの内の先頭と終端の共通メッセージキューを参照することにより全ての割り当て可能な共通メッセージキューを管理し、前記スレッドは割り当てられる共通メッセージキューの先頭と終端を参照しており、前記共通メッセージキューを割り当てる工程が、すでに割り当てられた共通メッセージキューがある場合に前記スレッドが参照している終端の共通メッセージキューを開放する工程と、前記メッセージキュー管理機能が参照している先頭の共通メッセージキューを開放する工程と、前記スレッドに割り当てる１または２以上の連続して参照される共通メッセージキューの終端の共通メッセージキューが次に参照する共通メッセージキューの参照を開放する工程と、すでに割り当てられた共通メッセージキューがある場合に開放した共通メッセージキューが次に参照する共通メッセージキューとして前記スレッドに割り当てる１または２以上の連続して参照される共通メッセージキューの先頭の共通メッセージキューを参照する工程と、前記スレッドが前記スレッドに割り当てる１または２以上の連続して参照される共通メッセージキューを含む前記スレッドが参照する全ての共通メッセージキューの先頭および終端の共通メッセージキューを参照する工程と、前記メッセージキュー管理機能が残った共通メッセージキューの内先頭の共通メッセージキューを参照する工程とを有し、前記スレッドおよび前記メッセージキュー管理機能並びに各共通メッセージキューの参照先を変更することで、前記スレッドへの１または２以上の共通メッセージキューの割り当ておよび前記メッセージキュー管理機能の前記共通メッセージキューの管理を行うことを特徴とする。
【００１４】
請求項５記載のスレッド間通信方法は、請求項２または請求項３のいずれかに記載のスレッド間通信方法において、割り当て可能な前記メッセージバッファは、次に参照されるメッセージバッファを参照することにより順番に並べられ、前記メッセージバッファ管理機能は前記順番に並べられたメッセージバッファの内の先頭と終端のメッセージバッファを参照することにより全ての割り当て可能なメッセージバッファを管理し、前記共通メッセージキューは割り当てられるメッセージバッファの先頭と終端を参照しており、前記メッセージバッファを割り当てる工程が、すでに割り当てられたメッセージバッファがある場合に前記共通メッセージキューが参照している終端のメッセージバッファを開放する工程と、前記メッセージバッファ管理機能が参照している先頭のメッセージバッファを開放する工程と、前記共通メッセージキューに割り当てる１または２以上の連続して参照されるメッセージバッファの終端のメッセージバッファが次に参照するメッセージバッファの参照を開放する工程と、すでに割り当てられたメッセージバッファがある場合に開放したメッセージバッファが次に参照するメッセージバッファとして前記共通メッセージキューに割り当てる１または２以上の連続して参照されるメッセージバッファの先頭のメッセージバッファを参照する工程と、前記共通メッセージバッファが前記共通メッセージバッファに割り当てる１または２以上の連続して参照されるメッセージバッファを含む前記共通メッセージバッファが参照する全てのメッセージバッファの先頭および終端のメッセージバッファを参照する工程と、前記メッセージバッファ管理機能が残ったメッセージバッファの内先頭のメッセージバッファを参照する工程とを有し、前記共通メッセージバッファおよび前記メッセージバッファ管理機能並びに各メッセージバッファの参照先を変更することで、前記共通メッセージバッファへの１または２以上のメッセージバッファの割り付けおよび前記メッセージバッファ管理機能の前記メッセージバッファの管理を行うことを特徴とする。
【００１５】
請求項６記載のスレッド間通信方法は、請求項１または請求項２または請求項３または請求項４のいずれかに記載のスレッド間通信方法において、割り当てることができる共通メッセージキューの数が無制限であることを特徴とする。
【００１６】
以上により、スレッド間通信効率を向上させることができる。
【発明の効果】
【００１７】
スレッドに任意に割り付け可能な共通メッセージキューおよび、共通メッセージキューに任意に割り付け可能なメッセージバッファを有することにより、複数のメッセージキューを持たないスレッドを有するマルチスレッドに対応したＯＳにおいても、スレッドが通信するメッセージの自由度が高まり、スレッド間通信効率を向上させることができる。
【発明を実施するための最良の形態】
【００１８】
本発明のスレッド間通信方法は、各々のスレッドには１つのメッセージキューしか割り当てられないＯＳ上で動作するプロセスにおいて、複数のスレッド間でデータを通信する方法に関するものである。具体的には、プロセス内に複数のスレッド間で共通に使用可能な複数の共通メッセージキューを管理するメッセージキュー管理機構と、共通メッセージキューに関連付けられるメッセージバッファを管理するメッセージバッファ管理機構とを設ける。メッセージキュー管理機構は複数の共通メッセージキューを線形リスト参照構造で管理しており、スレッドから要求があった場合には未使用の共通メッセージキューを要求したスレッドへと割り当てる。メッセージバッファ管理機構は複数のメッセージバッファを線形リスト参照構造によって管理しており、スレッドからメッセージが送信される場合には、スレッドにメッセージバッファへのアドレスを渡すことによって、スレッドはメッセージバッファを取得する。送信元のスレッドは指定されたメッセージキューへ割り当てられたメッセージバッファにメッセージを格納し、スレッドに割り当てられているメッセージキューを指定してメッセージバッファを割り当てる。
【００１９】
この構成において、メッセージを送信する場合には、まず、メッセージを送信したいスレッドは、未使用メッセージバッファのアドレスを取得することにより、メッセージバッファ管理機構を介して未使用のメッセージバッファを取得する。次に、スレッドは、取得した未使用のメッセージバッファへメッセージ（情報）を格納する。最後に、メッセージを格納したメッセージバッファを、送信先のメッセージキューに割り当てることによって、メッセージを送信することになる。この時、送信先のメッセージキューとして、この時点で自身のスレットに割り当てられているメッセージキューに割り当てるだけでなく、他のスレッドに割り当てられているメッセージキューに割り当てることもできる。
【００２０】
また、メッセージを受信する場合には、送信先のスレッドは割り当てられたメッセージバッファを取得し、取得したメッセージバッファからメッセージを取り出し、メッセージバッファをメッセージバッファ管理機構へと返却する。
【００２１】
なお、メッセージバッファ管理機構から送信元のスレッドへのメッセージバッファの割り当て、メッセージバッファへのメッセージの格納、送信元のスレッドから送信先のスレッドへのメッセージバッファの割り当てが、メッセージの送信に相当することになる。また、割り当てられたメッセージバッファからのメッセージの取り出し、メッセージバッファ管理機構へのメッセージバッファの返却がメッセージの受信に相当することになる。
【００２２】
以上の処理を行うことによりスレッド間メッセージ通信が行われる。なお、通信は必ずしも互いに異なるスレッド間で行われる必要は無く、同一のスレッド内で異なる共通メッセージキューへとメッセージの送信、受信をすることもありえる。
【００２３】
ここで、スレッドへの共通メッセージキューの割り当ては、例えば、メッセージキュー管理機構が管理する共通メッセージキューの先頭アドレスを次段の共通メッセージキューのアドレスへと書き換えると共に、スレッドに割り当てられた共通メッセージキューの終端アドレスを新たに割り当てられた共通メッセージキューのアドレスへと書き換えることにより行われる。また、共通メッセージキューの開放は、例えば、スレッドが保持する共通メッセージキューのアドレスを次段の共通メッセージキューのアドレスへと書き換えると共に、メッセージキュー管理機構が管理する共通メッセージキューの終端アドレスを新たに開放される共通メッセージキューのアドレスへと書き換えることにより行われる。これは、メッセージキューへのメッセージバッファの割り当ておよび開放についても同様である。
【００２４】
ここで、上記スレッド間通信を実装したプログラムは、例えば、以下の手段から構成される。すなわち、未使用の共通メッセージキューをメッセージキュー管理機構から取得し、任意のスレッドに割り当てるメッセージキュー割り当て手段と、任意のスレッドに割り当てられていた共通メッセージキューを開放し、メッセージキュー管理機構へ返却する共通メッセージキュー開放手段と、メッセージバッファ管理機構からメッセージバッファを取得し、取得したメッセージバッファに任意の情報（メッセージ）を格納し、任意の共通メッセージキューへメッセージバッファを割り当てるためのメッセージ送信手段と、任意の共通メッセージキューに割り当てられたメッセージバッファを取得し、取得したメッセージバッファから情報（メッセージ）を取得し、取得したメッセージバッファをメッセージバッファ管理機構へ返却するメッセージ受信手段とから構成される。なお、各々の手段はプログラム言語における関数、すなわちサブルーチンで実現され得る。
【００２５】
ここで、各々の構成要素について、さらに説明を加える。メッセージバッファは、自身以外へのメッセージバッファへのアドレスを保持するメモリ領域と、メッセージを識別するためのメッセージ識別子とその他の情報（メッセージ）を保持するためのメモリ領域とを有する。自身以外のメッセージバッファへのアドレスを保持することにより、線形リスト参照構造で共通メッセージキューやメッセージバッファ管理機構に割り当てられる。
【００２６】
共通メッセージキューは、自身以外の共通メッセージキューへのアドレスを保持するメモリ領域と、メッセージバッファへのアドレスを保持するメモリ領域とを有し、共通メッセージキューのアドレスを保持することにより、スレッドへと線形リスト参照構造で共通メッセージキューが割り当てられる。また、メッセージバッファのアドレスを保持することにより、線形リスト参照構造における先頭としてのメッセージバッファが割り当てられる。
【００２７】
複数のスレッドは、割り当てられた共通メッセージキューの先頭アドレスを保持するメモリ領域と終端アドレスを保持するメモリ領域を有し、これらのメモリ領域に共通メッセージキューへのアドレスを格納することにより、線形リスト参照構造で共通メッセージキューが関連付けられる。
【００２８】
メッセージキュー管理機構は、メッセージキュー管理機構生成時に未使用の共通メッセージキューの線形リスト参照構造を形成する。そして、線形リスト構造化された先頭の共通メッセージキューへのアドレスを保持するためのメモリ領域と、線形リスト構造化された終端の共通メッセージキューへのアドレスを保持するためのメモリ領域を有する。また、自身のメモリ領域に保持する未使用の共通メッセージキューのアドレスを任意のスレッドのメモリ領域へと移動して、共通メッセージキューをスレッドへと割り当てることができる。また、任意のスレッドのメモリ領域に保持されている共通メッセージキューのアドレスを自身のメモリ領域に移動して、共通メッセージキューが返却される。
【００２９】
メッセージバッファ管理機構は、メッセージバッファ管理機構生成時に未使用のメッセージバッファの線形リスト参照構造を形成する。そして、線形リスト構造化されたメッセージバッファの先頭のメッセージバッファへのアドレスを保持するためのメモリ領域と、終端のメッセージバッファへのアドレスを保持するためのメモリ領域を有する。また、自身のメモリ領域に保持する未使用のメッセージバッファへのアドレスを任意の共通メッセージキューの有するメモリ領域へと移動して、メッセージバッファへとメッセージキューを割り当てることができる。また、任意の共通メッセージキューのメモリ領域に保持されているメッセージバッファへのアドレスを、自身のメモリ領域に移動して、メッセージバッファが返却される。
【００３０】
このように、スレッドに任意に割り付け可能な共通メッセージキューおよび、共通メッセージキューに任意に割り付け可能なメッセージバッファを有することにより、複数のメッセージキューを持たないスレッドを有するマルチスレッドに対応したＯＳにおいても、スレッドが通信するメッセージの自由度が高まり、スレッド間通信効率を向上させることができる。
【００３１】
以下に、実施例に分けて、上述の処理を詳細に説明する。すなわち、実施例１において共通メッセージキューの割り当てを、実施例２において共通メッセージキューの返却を、実施例３において共通メッセージキューの一括返却を、実施例４においてメッセージの送信を、実施例５においてメッセージの受信を説明する。
（実施例１）
以下、本発明の実施例１として、図１，図２，図３，図４，図５，図６を参照しながら説明する。実施例１では、スレッドに対しメッセージキューを複数割り当てる方法について説明する。
【００３２】
図１は本発明におけるメッセージキューとスレッドの関係を表わす構成図である。
図１において、１０１はスレッド、１０２はメッセージキュー管理機構、１０３はメッセージキュー、１０４はメッセージキュー、１０５はメッセージキュー、１０６はメッセージキューであり、複数のスレッド間で共通に使用可能な複数の共通メッセージキューである。１０７はスレッド１０１へ割り当てられた先頭のメッセージキューへのアドレスを格納するためのメモリ、１０８はスレッド１０１へ割り当てられた終端のメッセージキューへのアドレスを格納するためのメモリ、１０９はメッセージキュー管理機構２が所有する先頭のメッセージキューへのアドレスを格納するためのメモリ、１１０はメッセージキュー管理機構２が所有する終端のメッセージキューへのアドレスを格納するためのメモリ、１１１はメッセージキュー１０３に連結している次のメッセージキューのアドレスを格納するためのメモリ、１１２はメッセージキュー１０４に連結している次のメッセージキューのアドレスを格納するためのメモリ、１１３はメッセージキュー１０５に連結している次のメッセージキューのアドレスを格納するためのメモリ、１１４はメッセージキュー１０６に連結している次のメッセージキューのアドレスを格納するためのメモリ、Ｒ１０１はスレッド１０１内の先頭Ｑ参照によって参照されるメッセージキューへの参照関係、Ｒ１０２はスレッド１０１内の終端Ｑ参照によって参照されるメッセージキューへの参照関係、Ｒ１０３はメセージキュー管理機構２内の先頭Ｑ参照によって参照されるメッセージキューへの参照関係、Ｒ１０４はメッセージキュー管理機構２内の終端Ｑ参照によって参照されるメッセージキューへの参照関係、Ｒ１０５はメッセージキュー１０３内の次Ｑ参照によって参照されるメッセージキューへの参照関係、Ｒ１０６はメッセージキュー１０４内の次Ｑ参照によって参照されるメッセージキューへの参照関係、Ｒ１０７はメッセージキュー１０５内の次Ｑ参照によって参照されるメッセージキューへの参照関係、Ｒ１０８はメッセージキュー１０６内の次Ｑ参照によって参照されるメッセージキューへの参照関係、をそれぞれ示している。
【００３３】
図２はスレッドにメッセージキューを割り当てた時のメッセージキューとスレッドの関係を表わす構成図であり、図１の状態からスレッド１０１にメッセージキュー１０３を割り当てた状態を示している。
【００３４】
図２において、図１と同一構成要素には同じ符号を付与し説明は省略する。ただし、参照関係Ｒ１０１，参照関係Ｒ１０２はメッセージキュー１０３を参照する形になっている。
【００３５】
図３はスレッドに２つのメッセージキューを割り当てた時のメッセージキューとスレッドの関係を表わす構成図であり、図２の状態からスレッド１０１にメッセージキュー１０４を割り当てた状態を示している。
【００３６】
図３において、図１と同一構成要素には同じ符号を付与し説明は省略する。ただし、参照関係Ｒ１０１はメッセージキュー１０３を、参照関係Ｒ１０２はメッセージキュー１０４を参照する形になっている。
【００３７】
図４はスレッドに割り当てられたメッセージキューを示すアドレスを格納したメモリのメモリ内容を表わす図であり、４０１は図１の状態におけるメモリ内容の一覧を示している。
【００３８】
図５はメッセージキューを割り当てた状態のメモリのメモリ内容を表わす図であり、図２の状態におけるメモリ内容を表している。５０１は図２の状態におけるメモリ内容の一覧を示している。
【００３９】
図６は２つのメッセージキューを割り当てた状態のメモリのメモリ内容を表わす図であり、図３の状態におけるメモリ内容を表している。６０１は図３の状態におけるメモリ内容の一覧を示している。
まず、参照関係Ｒ１０１の参照先を未参照からメッセージキュー１０３にするために、スレッド１０１内の先頭Ｑ参照の格納値である未参照を示す値をＮＵＬＬ（以降、本発明において、未参照を示すメモリの値をＮＵＬＬと称す）からメッセージキュー管理機構２内の先頭Ｑ参照の格納値であるメッセージキュー１０３へのアドレスに書き換える。
【００４０】
次に、参照関係Ｒ１０２の参照先を未参照から参照関係Ｒ１０３の参照先であるメッセージキュー１０３にするために、スレッド１０１内の終端Ｑ参照の格納値をＮＵＬＬからメッセージキュー管理機構２内の先頭Ｑ参照の格納値であるメッセージキュー１０３へのアドレスに書き換える。
【００４１】
次に、参照関係Ｒ１０３の参照先をメッセージキュー１０３から参照関係Ｒ１０５の参照先であるメッセージキュー１０４に変更するために、メッセージキュー管理機構２内の先頭Ｑ参照の格納値をメッセージキュー１０３へのアドレスからメッセージキュー１０３内の次Ｑ参照の格納値であるメッセージキュー１０４へのアドレスに書き換える。
【００４２】
次に、参照関係Ｒ１０５の参照先をメッセージキュー１０４から未参照にするために、メッセージキュー１０３内の次Ｑ参照の格納値をメッセージキュー１０４へのアドレスからＮＵＬＬに書き換える。
スレッド１０１に対しメッセージキュー１０３を割り当てた状態が図２に示す状態であり、この時のメモリ１０７から１１４のメモリ内容は図５に示すとおりである。
【００４３】
さらに図２において、まず、参照関係参照関係Ｒ１１２の参照先を未参照から参照関係参照関係Ｒ１１３の参照先であるメッセージキュー１０４にするために、スレッド１０１内の終端Ｑ参照の格納値をＮＵＬＬからメッセージキュー管理機構２内の先頭Ｑ参照の格納値であるメッセージキュー１０４へのアドレスに書き換える。
【００４４】
次に、参照関係参照関係Ｒ１１３の参照先をメッセージキュー１０４から参照関係参照関係Ｒ１１５の参照先であるメッセージキュー１０５に変更するために、メッセージキュー管理機構２内の先頭Ｑ参照の格納値をメッセージキュー１０４へのアドレスからメッセージキュー１０４内の次Ｑ参照の格納値であるメッセージキュー１０５へのアドレスに書き換える。
【００４５】
次に、参照関係参照関係Ｒ１１５の参照先を未参照からメッセージキュー１０４にするために、メッセージキュー１０３内の次Ｑ参照の格納値をＮＵＬＬからスレッド１０１内の終端Ｑ参照の格納値であるメッセージキュー１０４へのアドレスに書き換える。
【００４６】
以上がスレッドにメッセージキューを複数割り当てる方法についての説明である。
スレッド１０１に対しメッセージキュー１０４を割り当てた状態が図３に示す状態であり、この時のメモリ１０７から１１４のメモリ内容は図６に示すとおりである。
【００４７】
実施例１では１つのスレッドに対し複数のメッセージキューの割当方法を説明したが、複数のスレッドに対し実施例１の手段を用いることにより、複数のスレッドに複数のメッセージキューを割り当てることができるため、効率のよいスレッド間通信を行うことができる。
（実施例２）
以下、複数のメッセージキューを開放する方法を本発明の実施例２として、図３，図６，図７，図８，図９，図１０を参照しながら説明する。
【００４８】
図７は１つのスレッドに１つのメッセージキューを割り当てた時のメッセージキューとスレッドの関係を表わす構成図である。図７において、図３と同一構成要素には同じ符号を付与し説明は省略する。ただし、参照関係Ｒ１０５は開放される形になっている。
【００４９】
図８はスレッドに割り付けられたメッセージキューを開放した時のメッセージキューとスレッドの関係を表わす構成図であり、図７の状態からスレッド１０１に割り当てられているメッセージキュー１０３を開放した状態である。図８において、図３と同一構成要素には同じ符号を付与し説明は省略する。ただし、参照関係Ｒ１０５，参照関係Ｒ１０８は開放される形になっている。
【００５０】
図９は１つのメッセージキューを割り当てた状態のメモリのメモリ内容を表わす図であり、図７の状態におけるメモリ内容を表している。９０１は図７の状態におけるメモリ内容の一覧である。
【００５１】
図１０は割り付けられたメッセージキューを開放した状態のメモリのメモリ内容を表わす図であり、図８の状態におけるメモリ内容を表している。１００１は図８の状態におけるメモリ内容の一覧である。
【００５２】
以下の実施例２では、スレッドに割り当てられた一つ以上の任意のメッセージキューを開放する方法について説明する。
図３において、まず、参照関係Ｒ３０４の参照先をメッセージキュー１０６から参照関係Ｒ３０１の参照先であるメッセージスキュー１０３にするために、メッセージキュー管理機構２内の終端Ｑ参照の格納値をメッセージキュー１０６へのアドレスからスレッド１０１２内の先頭Ｑ参照の格納値であるメッセージキュー１０３へのアドレスに書き換える。
【００５３】
次に、参照関係Ｒ３０８の参照先である未参照から参照関係Ｒ３０１の参照先であるメッセージキュー１０３にするために、メッセージキュー１０６内の次Ｑ参照の格納値をＮＵＬＬからスレッド１０１の先頭Ｑ参照の格納値であるメッセージキュー１０３へのアドレスに書き換える。
【００５４】
次に、参照関係Ｒ３０１の参照先をメッセージキュー１から参照関係Ｒ３０５の参照先であるメッセージキュー１０４にするために、スレッド１０１内の先頭Ｑ参照の格納値をメッセージキュー１０３へのアドレスからメッセージキュー１０３内の次Ｑ参照の格納値であるメッセージキュー１０４へのアドレスに書き換える。
【００５５】
次に、参照関係Ｒ３０５の参照先であるメッセージキュー１０４への参照を未参照にするために、メッセージキュー１０３内の次Ｑ参照の格納値をメッセージキュー１０４へのアドレスからＮＵＬＬに書き換える。
【００５６】
以上がスレッドからメッセージキューを開放する方法についての説明である。
スレッド１０１からメッセージキュー１０３を開放した状態が図７に示す状態であり、この時のメモリ１０７から１１４のメモリ内容は図９に示すとおりである。
【００５７】
図７において、まず、参照関係Ｒ７０４の参照先をメッセージキュー１０３から参照関係Ｒ７０１の参照先であるメッセージキュー１０４にするために、メッセージキュー管理機構２内の終端Ｑ参照の格納値をメッセージキュー１０３へのアドレスからスレッド１０１内の先頭Ｑ参照の格納値であるメッセージキュー１０４へのアドレスに書き換える。
【００５８】
次に、参照関係Ｒ１０５の参照先である未参照から参照関係Ｒ１０１の参照先であるメッセージキュー１０４にするために、メッセージキュー１０３内の次Ｑ参照の格納値であるＮＵＬＬからスレッド１０１の先頭Ｑ参照の格納値をＮＵＬＬからメッセージキュー１０４へのアドレスに書き換える。
【００５９】
次に、参照関係Ｒ１０１の参照先をメッセージキュー１０３から参照関係Ｒ７０６の参照先である未参照にするために、スレッド１０１内の先頭Ｑ参照の格納値をメッセージキュー１０４へのアドレスからメッセージキュー１０４内の次Ｑ参照の格納値であるＮＵＬＬに書き換える。
【００６０】
以上が、スレッドから複数のメッセージキューを開放する方法についての説明である。
スレッド１０１からメッセージキュー１０４を開放した状態が図８に示す状態であり、この時のメモリ１０７から１１４のメモリ内容は図１０に示すとおりである。
【００６１】
実施例２では１つのスレッドから複数のメッセージキューの開放方法を説明したが、複数のスレッドに実施例２を用いることによって、複数のスレッドから複数のメッセージキューを開放することができ、効率のよいスレッド間通信を行うことができる。
（実施例３）
以下、本発明の実施例３を、図３，図６，図８，図１０を参照しながら説明する。
【００６２】
実施３では、スレッドに割り当てられた複数のメッセージキューを一度に開放する手段についての手順を説明する。
図３において、まず、参照関係Ｒ３０４の参照先をメッセージキュー１０６から参照関係Ｒ３０２の参照先であるメッセージキュー１０３にするために、メッセージキュー管理機構２内の終端Ｑ参照の格納値をメッセージキュー１０６へのアドレスからスレッド１０１内の終端Ｑ参照の格納値であるメッセージキュー１０４へのアドレスに書き換える。
【００６３】
次に、参照関係Ｒ３０８の参照先である未参照から参照関係Ｒ３０１の参照先であるメッセージキュー１０３にするために、メッセージキュー１０６内の次Ｑ参照の格納値であるＮＵＬＬからスレッド１０１の先頭Ｑ参照の格納値をＮＵＬＬからメッセージキュー１０３へのアドレスに書き換える。
【００６４】
次に、参照関係Ｒ３０１の参照先をメッセージキュー１０３から参照関係Ｒ３０６の参照先である未参照にするために、スレッド１０１内の先頭Ｑ参照の格納値をメッセージキュー１０３へのアドレスからメッセージキュー１０４内の次Ｑ参照の格納値であるＮＵＬＬに書き換える。
【００６５】
この時のメモリ１０７から１１４のメモリ内容は図１０に示すとおりである。
以上のように実施例３を用いることにより、スレッドに割り当てられているメッセージキューの数に関わらず同じ処理手順で開放することができ、効率のよいスレッド間通信を行うことができる。
（実施例４）
以下、本発明の実施例４を、図１１，図１２，図１３，図１４，図１５，図１６，図１７，図１８、図１９を参照しながら説明する。
【００６６】
図１１は本発明におけるメッセージバッファとメッセージキューとの関係を表わす構成図である。なお、メッセージキューはスレッドに割り当てられているものであるが、ここではスレッドについては図示しない。
【００６７】
図１１において、１１０１はメッセージキュー、１１０２はメッセージキューであり、複数のスレッド間で共通に使用可能な複数の共通メッセージキューである。１１０３はメッセージバッファ管理機構、１１０４はメッセージバッファ、１１０５はメッセージバッファ、１１０６はメッセージバッファであり、メッセージキューに接続され、メッセージ通信時にメッセージを格納する。１１０７はメッセージキュー１１０１に送信された先頭のメッセージバッファへのアドレスを格納するためのメモリ、１１０８はメッセージキュー１１０１に送信された終端のメッセージバッファへのアドレスを格納するためのメモリ、１１０９はメッセージキュー１１０１に連結している次のメッセージキューへのアドレスを格納するためのメモリ、１１１０はメッセージキュー１１０２に送信された先頭のメッセージバッファへのアドレスを格納するためのメモリ、１１１１はメッセージキュー１１０２に送信された終端のメッセージバッファへのアドレスを格納するためのメモリ、１１１２はメッセージキュー１１０２に連結している次のメッセージキューへのアドレスを格納するためのメモリ、１１１３はメッセージバッファ管理機構１１０３が所有する先頭のメッセージバッファへのアドレスを格納するためのメモリ、１１１４はメッセージバッファ管理機構２が所有する終端のメッセージバッファへのアドレスを格納するためのメモリ、１１１５はメッセージバッファ１１０４に連結している次のメッセージバッファへのアドレスを格納するためのメモリ、１１１６はメッセージバッファ１１０５に連結している次のメッセージバッファへのアドレスを格納するためのメモリ、１１１７はメッセージバッファ１１０６に連結している次のメッセージバッファへのアドレスを格納するためのメモリ、Ｒ１１０１はメッセージキュー１１０１内の先頭Ｍ参照によって参照されるメッセージバッファへの参照関係、Ｒ１１０２はメッセージキュー１１０１内の終端Ｍ参照によって参照されるメッセージバッファへの参照関係、Ｒ１１０３はメッセージキュー１１０１内の次Ｑ参照によって参照されるメッセージキューへの参照関係、Ｒ１１０４はメッセージキュー１１０２内の先頭Ｍ参照によって参照されるメッセージバッファへの参照関係、Ｒ１１０５はメッセージキュー１１０２内の終端Ｍ参照によって参照されるメッセージバッファへの参照関係、Ｒ１１０６はメッセージキュー１１０２内の次Ｑ参照によって参照されるメッセージキューへの参照関係、Ｒ１１０７はメッセージバッファ管理機構１１０３内の先頭Ｍ参照によって参照されるメッセージバッファへの参照関係、Ｒ１１０８はメッセージバッファ管理機構２内の終端Ｍ参照によって参照されるメッセージバッファへの参照関係、Ｒ１１０９はメッセージバッファ１１０４内の次Ｍ参照によって参照されるメッセージバッファへの参照関係、Ｒ１１１０はメッセージバッファ１１０５内の次Ｍ参照によって参照されるメッセージバッファへの参照関係、Ｒ１１１１はメッセージバッファ１１０６内の次Ｍ参照によって参照されるメッセージバッファへの参照関係、をそれぞれ示している。
【００６８】
図１２は、メッセージバッファに格納されたメッセージをメッセージキューへ送信する時のメッセージバッファとメッセージキューの関係を表わす構成図であり、図１１の状態からメッセージバッファ１１０５をメッセージキュー１１０１へ送信した状態である。
【００６９】
図１２において、図１１と同一構成要素には同じ符号を付与し説明は省略する。ただし、参照関係Ｒ１１０１，Ｒ１１０２はメッセージバッファ１１０４を参照する形になっている。
【００７０】
図１３は、２つのメッセージバッファに格納されたメッセージをそれぞれに対応するメッセージキューへ送信する時のメッセージバッファとメッセージキューの関係を表わす構成図であり、図１２の状態からメッセージバッファ１２０５をメッセージキュー１１０２へ送信した状態である。
【００７１】
図１３において、図１１と同一構成要素には同じ符号を付与し説明は省略する。ただし、参照関係Ｒ１１０１，Ｒ１１０２はメッセージバッファ１１０４を参照し、参照関係Ｒ１１０４，Ｒ１１０５はメッセージバッファ１１０４を参照する形になっている。
【００７２】
図１４は複数のメッセージバッファに格納されたメッセージを複数のメッセージキューへ送信する時のメッセージバッファとメッセージキューの関係を表わす構成図であり、図１３の状態からメッセージバッファ３をメッセージキュー１へ送信した状態である。
図１４において、図１１と同一構成要素には同じ符号を付与し説明は省略する。ただし、参照関係Ｒ１１０１Ｒ１１０２はメッセージバッファ１１０４を、Ｒ１１０２はメッセージバッファ１１０６を参照し、参照関係Ｒ１１０４，Ｒ１１０５はメッセージバッファ１１０５を参照する形になっている。
【００７３】
図１５はメッセージキューとメッセージバッファの参照関係を示すメモリのメモリ内容を表わす図であり、図１１の状態におけるメモリ内容を表している。１５０１は図１１の状態におけるメモリ内容の一覧を示している。
【００７４】
図１６はメッセージバッファに格納されたメッセージをメッセージキューへ送信する時のメモリのメモリ内容を表わす図であり、図１２の状態におけるメモリ内容を表している。１６０１は図１２の状態におけるメモリ内容の一覧を示している。
【００７５】
図１７は２つのメッセージバッファに格納されたメッセージをそれぞれに対応するメッセージキューへ送信する時のメモリのメモリ内容を表わす図であり、図１３の状態におけるメモリ内容を表している。１７０１は図１３の状態におけるメモリ内容の一覧を示している。
【００７６】
図１８は複数のメッセージバッファに格納されたメッセージを複数のメッセージキューへ送信する時のメモリのメモリ内容を表わす図であり、図１４の状態におけるメモリ内容を表している。１８０１は図１４の状態におけるメモリ内容の一覧を示している。
【００７７】
図１１の状態におけるメモリ１１０７から１１１７の状態は図１５に示すとおりである。
以下、実施例４では、スレッドの有する複数のメッセージキューに対しメッセージを送信する方法について説明する。
【００７８】
図１１において、まず、参照関係Ｒ１１０１の参照先を未参照から参照関係Ｒ１１０７の参照先であるメッセージバッファ１１０４にするために、メッセージキュー１１０１内の先頭Ｍ参照の格納値をＮＵＬＬからメッセージバッファ管理機構２内の先頭Ｍ参照の格納値であるメッセージバッファ１１０４へのアドレスに書き換える。次に、参照関係Ｒ１１０２の参照先を未参照から参照関係Ｒ１１０７の参照先であるメッセージバッファ１１０４にするために、メッセージキュー１１０１内の終端Ｍ参照の格納値をＮＵＬＬからメッセージバッファ管理機構２内の先頭Ｍ参照の格納値であるメッセージバッファ１１０４へのアドレスに書き換える。
【００７９】
次に、参照関係Ｒ１１０７の参照先をメッセージバッファ１１０４から参照関係Ｒ１１０９の参照先であるメッセージバッファ１１０５に変更するために、メッセージバッファ管理機構１１０３内の先頭Ｍ参照の格納値をメッセージバッファ１１０４へのアドレスからメッセージバッファ１１０４内の次Ｍ参照の格納値であるメッセージバッファ１１０５へのアドレスに書き換える。
【００８０】
次に、参照関係Ｒ１１０９の参照先をメッセージキュー１１０２から未参照にするために、メッセージバッファ１１０４内の次Ｍ参照の格納値をメッセージバッファ１１０５へのアドレスからＮＵＬＬに書き換える。
上記処理によって、メッセージキュー１１０１にメッセージバッファ管理機構からメッセージバッファ１１０４が割り当てられる。この結果、図１２の状態となる。
メッセージキュー１１０１に対しメッセージバッファ１１０４を割り当てた状態が図１２であり、この時のメモリ１１０７から１１１７まのメモリ内容は図１５に示すとおりである。次にメッセージキュー１１０２にメッセージバッファ１１０５が割り当てられる。
【００８１】
図１２において、まず、参照関係Ｒ１２０４の参照先を未参照から参照関係Ｒ１２０７の参照先であるメッセージバッファ１１０５にするために、メッセージキュー１１０２内の先頭Ｍ参照の格納値をＮＵＬＬからメッセージバッファ管理機構２内の先頭Ｍ参照の格納値であるメッセージバッファ１１０５へのアドレスに書き換える。
【００８２】
次に、参照関係Ｒ１２０５の参照先を未参照から参照関係Ｒ１２０７の参照先であるメッセージバッファ１１０５にするために、メッセージキュー１１０２内の終端Ｍ参照の格納値をＮＵＬＬからメッセージバッファ管理機構２内の先頭Ｍ参照の格納値であるメッセージバッファ１１０５へのアドレスに書き換える。
【００８３】
次に、参照関係Ｒ１２０７の参照先をメッセージバッファ１１０５から参照関係Ｒ１２１０の参照先であるメッセージバッファ１１０６に変更するために、メッセージバッファ管理機構１１０３内の先頭Ｍ参照の格納値をメッセージバッファ１１０５へのアドレスからメッセージバッファ１１０５内の次Ｍ参照の格納値であるメッセージバッファ１１０６へのアドレスに書き換える。
【００８４】
次に、参照関係Ｒ１２１０の参照先をメッセージキュー１１０６から未参照にするために、メッセージバッファ１１０５内の次Ｍ参照の格納値をメッセージバッファ１１０６へのアドレスからＮＵＬＬに書き換える。
【００８５】
上記処理によって、メッセージキュー１１０２にメッセージバッファ管理機構１１０３からメッセージバッファ１１０５が割り当てられる。この結果、図１３の状態となる。さらに、説明を省略するが、メッセージキュー１１０２にメッセージバッファ１１０５が割り当てられ、図１４の状態となる。
【００８６】
スレッドがメッセージキューに対しメッセージを送信するには、まず、スレッドはメッセージバッファ管理機構を介し空きメッセージバッファを取得し、取得した空きメッセージバッファにメッセージを格納する。具体的には、割り当てられたメッセージバッファのアドレスが示すメモリ領域に情報（メッセージ）を格納する。そして、メッセージを格納したメッセージバッファを送信先のメッセージキューへと割り当てる。具体的な処理（どのように参照アドレスを変化させるか）についてはメッセージバッファ管理機構の管理するメッセージバッファをメッセージキューへと割り当てる処理と同一であるのでここでは省略する。
【００８７】
以上が、スレッドが有する異なるメッセージキューにメッセージを送信する手段についての説明である。
実施例４では複数のメッセージキューに対し任意のメッセージキューを選択し、メッセージを送信する手段を説明したが、かかる手段を用いることにより、効率のよいスレッド間通信を行うことができる。
（実施例５）
以下、本発明の実施例５を、図１４，図１８，図１９，図２０，図２１，図２２，図２３，図２４を参照しながら説明する。
【００８８】
図１９は図１４の状態からメッセージバッファ１１０５をメッセージキュー１１０２から返却した図である。
図１９において、図１１と同一構成要素には同じ符号を付与し説明は省略する。ただし、参照関係Ｒ１１０１はメッセージバッファ１１０４を、参照関係Ｒ１１０２はメッセージバッファ１１０６を、参照関係Ｒ１１０７，Ｒ１１０８はメッセージバッファ１１０５を参照する形になっている。
【００８９】
図２０は図１９の状態からメッセージバッファ１１０４をメッセージキュー１１０１から返却した図である。
図２０において、図１１と同一構成要素には同じ符号を付与し説明は省略する。ただし、参照関係Ｒ１１０１，Ｒ１１０２はメッセージバッファ１１０６を、参照関係Ｒ１１０７はメッセージバッファ１１０５を、参照関係Ｒ１１０８はメッセージバッファ１１０４を参照する形になっている。
【００９０】
図２１、図２０の状態からメッセージバッファ１１０６をメッセージキュー１１０１から返却した図である。
図２１において、図１１と同一構成要素には同じ符号を付与し説明は省略する。ただし、参照関係Ｒ１１０７はメッセージバッファ１１０５を、参照関係Ｒ１１０８はメッセージバッファ１１０６を参照する形になっている。
【００９１】
実施例５では、スレッドに割り当てられた複数のメッセージキューに受信されたメッセージを、メッセージキューを選択し受信する方法について説明する。まず、メッセージキューは実施例４で説明した送信方法によって、自身に割り付けられたメッセージバッファからメッセージを取得する。具体的には、メッセージバッファのアドレスが示すメモリ領域からメッセージを取り出す。メッセージを取り出されたメッセージバッファは必要なくなったので開放され、メッセージバッファ管理機構へと返却される。これらのメッセージの取得、メッセージバッファの開放・返却の一連の処理がメッセージの受信に相当する。以下に、メッセージバッファの開放、返却について詳細に説明する。
【００９２】
図１４の状態におけるメモリ１１０７から１１１７の状態は図１８に示すとおりである。
図１４において、まず、参照関係Ｒ１４０７の参照先を未参照から参照関係Ｒ１４０４の参照先であるメッセージバッファ１１０５にするために、メッセージバッファ管理機構１１０３内の先頭Ｍ参照の格納値であるＮＵＬＬからメッセージキュー１１０１内の先頭Ｍ参照の格納値であるメッセージバッファ１１０５へのアドレスに書き換える。
【００９３】
次に、参照関係Ｒ１４０８の参照先を未参照から参照関係Ｒ１４０４の参照先であるメッセージバッファ１１０５にするために、メッセージバッファ管理機構１１０３内の終端Ｍ参照の格納値をＮＵＬＬからメッセージキュー１１０２内の先頭Ｍ参照の格納値であるメッセージバッファ１１０５へのアドレスに書き換える。
【００９４】
次に、参照関係Ｒ１４０４の参照先をメッセージバッファ１１０５から参照関係Ｒ１４１０の参照先である未参照にするために、メッセージキュー１１０２内の先頭Ｍ参照の格納値であるメッセージバッファ１１０５へのアドレスをメッセージバッファ１１０５内の次Ｍ参照の格納値であるＮＵＬＬに書き換える。
【００９５】
次に、参照関係Ｒ１４０５の参照先をメッセージバッファ１１０５から未参照にするために、メッセージキュー１１０２内の先頭Ｍ参照の格納値であるメッセージバッファ１１０５へのアドレスをＮＵＬＬに書き換える。
メッセージキュー１１０２からメッセージバッファ管理機構１１０３に対しメッセージキュー１１０２を返却した状態が図１９であり、この時のメモリ１１０７から１１１７まのメモリ内容は図２２に示すとおりである。
【００９６】
さらに図１９において、まず、参照関係Ｒ１１０８の参照先をメッセージバッファ１１０５から参照関係Ｒ１１０１の参照先であるメッセージバッファ１１０４にするために、メッセージバッファ管理機構１１０３内の先頭Ｍ参照の格納値であるメッセージバッファ１１０５へのアドレスからメッセージキュー１１０１内の先頭Ｍ参照の格納値であるメッセージバッファ１１０４へのアドレスへ書き換える。
【００９７】
次に、参照関係Ｒ１１１０の参照先を未参照から参照関係Ｒ１１０１の参照先であるメッセージバッファ１１１０４にするために、メッセージバッファ１１０５内の次Ｍ参照の格納値であるＮＵＬＬからメッセージキュー１１０１の先頭Ｍ参照の格納値であるメッセージバッファ１１０４へのアドレスに書き換える。
【００９８】
次に、参照関係Ｒ１１０１の参照先をメッセージバッファ１１０４から参照関係Ｒ１１０９の参照先であるメッセージバッファ１１０６にするために、メッセージキュー１１０１内の先頭Ｍ参照の格納値であるメッセージバッファ１１０４へのアドレスからメッセージバッファ１１０４内の次Ｍ参照の格納値であるメッセージバッファ１１０５へのアドレスに書き換える。
【００９９】
次に、参照関係Ｒ１１０９の参照先であるメッセージバッファ１１０６から未参照にするために、メッセージバッファ１１０４内の次Ｍ参照の格納値であるメッセージバッファ１１０６へのアドレスからＮＵＬＬに書き換える。
【０１００】
このようにして、メッセージキュー１１０１からメッセージバッファ管理機構１１０３に対しメッセージバッファ１１０４を返却することができる。メッセージキュー１１０１からメッセージバッファ管理機構１１０３に対しメッセージキュー１１０１を返却した状態が図２０であり、この時のメモリ１１０７から１１１７のメモリ内容は図２３に示すとおりである。
【０１０１】
実施例５ではスレッドに割り当てられている複数のメッセージキューから、メッセージキューを選択しメッセージを受信する方法を説明したが、かかる手段を用いることによって、複数のメッセージキューから複数のメッセージバッファを返却することができ、効率のよいスレッド間通信を行うことが出来る。
【産業上の利用可能性】
【０１０２】
本発明のスレッド間メッセージ通信方式によると、スレッド間通信効率を向上させることができ、マルチスレッド機能をサポートしているＯＳ上で動作するスレッド間のメッセージ通信方法等に有用である。
【図面の簡単な説明】
【０１０３】
【図１】本発明におけるメッセージキューとスレッドの関係を表わす構成図
【図２】スレッドにメッセージキューを割り当てた時のメッセージキューとスレッドの関係を表わす構成図
【図３】スレッドに２つのメッセージキューを割り当てた時のメッセージキューとスレッドの関係を表わす構成図
【図４】スレッドに割り当てられたメッセージキューを示すアドレスを格納したメモリのメモリ内容を表わす図
【図５】メッセージキューを割り当てた状態のメモリのメモリ内容を表わす図
【図６】２つのメッセージキューを割り当てた状態のメモリのメモリ内容を表わす図
【図７】１つのスレッドに１つのメッセージキューを割り当てた時のメッセージキューとスレッドの関係を表わす構成図
【図８】スレッドに割り付けられたメッセージキューを開放した時のメッセージキューとスレッドの関係を表わす構成図
【図９】１つのメッセージキューを割り当てた状態のメモリのメモリ内容を表わす図
【図１０】割り付けられたメッセージキューを開放した状態のメモリのメモリ内容を表わす図
【図１１】本発明におけるメッセージバッファとメッセージキューとの関係を表わす構成図
【図１２】メッセージバッファに格納されたメッセージをメッセージキューへ送信する時のメッセージバッファとメッセージキューの関係を表わす構成図
【図１３】２つのメッセージバッファに格納されたメッセージをそれぞれに対応するメッセージキューへ送信する時のメッセージバッファとメッセージキューの関係を表わす構成図
【図１４】複数のメッセージバッファに格納されたメッセージを複数のメッセージキューへ送信する時のメッセージバッファとメッセージキューの関係を表わす構成図
【図１５】メッセージキューとメッセージバッファの参照関係を示すメモリのメモリ内容を表わす図
【図１６】メッセージバッファに格納されたメッセージを対応するメッセージキューへ送信する時のメモリのメモリ内容を表わす図
【図１７】２つのメッセージバッファに格納されたメッセージをそれぞれに対応するメッセージキューへ送信する時のメモリのメモリ内容を表わす図
【図１８】複数のメッセージバッファに格納されたメッセージを複数のメッセージキューへ送信する時のメモリのメモリ内容を表わす図
【図１９】本発明の第５の実施例におけるメッセージキュー２からのメッセージバッファ２返却方法に関する説明図
【図２０】本発明の第５の実施例におけるメッセージキュー１からのメッセージバッファ１返却方法に関する説明図
【図２１】本発明の第５の実施例におけるメッセージキュー１へのメッセージバッファ３割り当て方法に関する説明図
【図２２】本発明の第５の実施例における図１９の状態のメモリの状態図
【図２３】本発明の第５の実施例における図２０の状態のメモリの状態図
【図２４】本発明の第５の実施例における図２１の状態のメモリの状態図
【図２５】Ｗｉｎｄｏｗｓ（登録商標）におけるスレッド構成を示す図
【図２６】Ｗｉｎｄｏｗｓ（登録商標）におけるメッセージのフローを示す図
【符号の説明】
【０１０４】
１０１    スレッド
１０２    メッセージキュー管理機構
１０３    メッセージキュー
１０４    メッセージキュー
１０５    メッセージキュー
１０６    メッセージキュー
１０７    メモリ
１０８    メモリ
１０９    メモリ
１１０    メモリ
１１１    メモリ
１１２    メモリ
１１３    メモリ
１１４    メモリ
Ｒ１０１    参照関係
Ｒ１０２    参照関係
Ｒ１０３    参照関係
Ｒ１０４    参照関係
Ｒ１０５    参照関係
Ｒ１０６    参照関係
Ｒ１０７    参照関係
Ｒ１０８    参照関係
４０１    メモリ内容の一覧
５０１    メモリ内容の一覧
６０１    メモリ内容の一覧
９０１    メモリ内容の一覧
１００１    メモリ内容の一覧
１１０１    メッセージキュー
１１０２    メッセージキュー
１１０３    メッセージバッファ管理機構
１１０４    メッセージバッファ
１１０５    メッセージバッファ
１１０６    メッセージバッファ
１１０７    メモリ
１１０８    メモリ
１１０９    メモリ
１１１０    メモリ
１１１１    メモリ
１１１２    メモリ
１１１３    メモリ
１１１４    メモリ
１１１５    メモリ
１１１６    メモリ
１１１７    メモリ
Ｒ１１０１    参照関係
Ｒ１１０２    参照関係
Ｒ１１０３    参照関係
Ｒ１１０４    参照関係
Ｒ１１０５    参照関係
Ｒ１１０６    参照関係
Ｒ１１０７    参照関係
Ｒ１１０８    参照関係
Ｒ１１０９    参照関係
Ｒ１１１０    参照関係
Ｒ１１１１    参照関係
１５０１    メモリ内容の一覧
１６０１    メモリ内容の一覧
１７０１    メモリ内容の一覧
１８０１    メモリ内容の一覧
【図１】
2005352793.tif 000003
【図２】
2005352793.tif 000004
【図３】
2005352793.tif 000005
【図４】
2005352793.tif 000006
【図５】
2005352793.tif 000007
【図６】
2005352793.tif 000008
【図７】
2005352793.tif 000009
【図８】
2005352793.tif 000010
【図９】
2005352793.tif 000011
【図１０】
2005352793.tif 000012
【図１１】
2005352793.tif 000013
【図１２】
2005352793.tif 000014
【図１３】
2005352793.tif 000015
【図１４】
2005352793.tif 000016
【図１５】
2005352793.tif 000017
【図１６】
2005352793.tif 000018
【図１７】
2005352793.tif 000019
【図１８】
2005352793.tif 000020
【図１９】
2005352793.tif 000021
【図２０】
2005352793.tif 000022
【図２１】
2005352793.tif 000023
【図２２】
2005352793.tif 000024
【図２３】
2005352793.tif 000025
【図２４】
2005352793.tif 000026
【図２５】
2005352793.tif 000027
【図２６】
2005352793.tif 000028