(57)【特許請求の範囲】
【請求項１】
電話加入者からのアクセスに対する電話交換のマルチスレッドの制御方法において、
予め定められた複数のＩＤ番号毎に発呼要求と複数のメッセージがキューイング可能なキュー領域を有する第１の記憶領域、前記ＩＤ番号がキューイングされる第２の記憶領域、及び所定数のスレッドをメモリ上に生成するステップと、
発呼要求と複数のメッセージが受信されたときに前記第１の記憶領域にアクセスして、空きのキュー領域を検索し、この検索により空きのキュー領域を確認したときは、そのキュー領域のＩＤ番号を読み込むと共に、そのＩＤ番号のキュー領域に前記発呼要求と複数のメッセージをキューイングするステップと、
ＩＤ番号を取得した際に、前記所定数のスレッドの中から待機中のスレッドが存在するかどうかを検索し、この検索により待機中のスレッドの存在を確認したときは、取得したＩＤ番号を前記第２の記憶領域にキューイングするステップとを有し、
前記第２の記憶領域に前記ＩＤ番号がキューイングされたとき、待機中のスレッドのうち先頭のスレッドから、そのＩＤ番号を取り出して前記第１の記憶領域にアクセスし、同一ＩＤ番号のキュー領域にキューイングされた前記発呼要求と複数のメッセージを読み込み、その複数のメッセージに基づく処理を実行させるようにしたことを特徴とする電話交換におけるマルチスレッドの制御方法。
【請求項２】
スレッドから処理終了の通知を受けたとき前記第１の記憶領域にアクセスして、そのスレッドが取り出したＩＤ番号と同一のＩＤ番号のキュー領域を開放することを特徴とする請求項１記載の電話交換におけるマルチスレッドの制御方法。
【請求項３】
前記スレッドは、複数のメッセージに優先度が付けられているとき、優先順位の高いメッセージから順に実行することを特徴とする請求項１又は２記載の電話交換におけるマルチスレッドの制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えば電話交換器上での並列処理を行うマルチスレッドの制御方法に関するものである。
【０００２】
【従来の技術】
ＵＮＩＸ（登録商標）上でのマルチタスク処理は複数のプロセスにより実現していた。このため、マルチタスクを行う際の排他制御はＩＰＣセマフォを使用してデータの整合性等を保証していたが、近年、マルチスレッドによるマルチタスク処理技術の発展により、ＵＮＩＸ（登録商標）上でのマルチタスク処理はスレッドを使用する方向となってきた。このため、ＵＮＩＸ（登録商標）上での電話の交換処理においてもマルチスレッドを用いた排他制御の実装が不可欠となっている。
【０００３】
従来、マルチスレッドを用いた排他制御を行う場合は、スレッド毎に排他を保持し、処理とスレッドを１対１で対応させてスレッド毎にＦＩＦＯのメッセージキューを作成し、このメッセージキュー経由でスレッドに通知することにより排他制御が行われていた。
【０００４】
例えば図４に示すように、予め生成された親レッド１に発呼要求が受信されると、親スレッド１は、その発呼に対応する子スレッド２を生成し、発呼があった旨を通知する。そして、メッセージが受信されたときはその子スレッド２にメッセージを通知し、メッセージに応じた処理を実行させる。回線の切断要求が受信されたときは、その旨を子スレッド２に通知して解放し、再利用可能な状態にする。
【０００５】
【発明が解決しようとする課題】
しかしながら、前述した従来のマルチスレッドの制御方法では、発呼時に子スレッド２を生成するようにしているため、子スレッド２の処理生成に時間がかかり、処理能力に大きく影響を与えていた。また、発呼毎に子スレッド２を割り当てるため、処理中でない子スレッド２が多数存在し、リソースに無駄が発生するという課題があった。
【０００６】
【課題を解決するための手段】
本発明の電話交換におけるマルチスレッドの制御方法は、電話加入者からのアクセスに対する電話交換のマルチスレッドの制御方法において、予め定められた複数のＩＤ番号毎に発呼要求と複数のメッセージがキューイング可能なキュー領域を有する第１の記憶領域、ＩＤ番号がキューイングされる第２の記憶領域、及び所定数のスレッドをメモリ上に生成するステップと、発呼要求と複数のメッセージが受信されたときに第１の記憶領域にアクセスして、空きのキュー領域を検索し、この検索により空きのキュー領域を確認したときは、そのキュー領域のＩＤ番号を読み込むと共に、そのＩＤ番号のキュー領域に発呼要求と複数のメッセージをキューイングするステップと、ＩＤ番号を取得した際に、所定数のスレッドの中から待機中のスレッドが存在するかどうかを検索し、この検索により待機中のスレッドの存在を確認したときは、取得したＩＤ番号を第２の記憶領域にキューイングするステップとを有し、第２の記憶領域にＩＤ番号がキューイングされたとき、待機中のスレッドのうち先頭のスレッドから、そのＩＤ番号を取り出して第１の記憶領域にアクセスし、同一ＩＤ番号のキュー領域にキューイングされた発呼要求と複数のメッセージを読み込み、その複数のメッセージに基づく処理を実行させるようにした。
【０００７】
本発明においては、発呼要求と複数のメッセージが受信されると、第１の記憶領域にアクセスして空きのキュー領域を検索する。その第１の記憶領域には、複数のＩＤ番号が付与され、このＩＤ番号毎に発呼要求と複数の複数のメッセージがキューイング可能なキュー領域が設けられている。検索により空きのキュー領域を確認したときは、そのキュー領域のＩＤ番号を読み込むと共に、そのＩＤ番号のキュー領域に、受信された発呼要求と複数のメッセージをキューイングする。そして、ＩＤ番号を取得した際に、予め生成された複数のスレッドの中から待機中のスレッドが存在するかどうかを検索し、この検索により待機中のスレッドの存在を確認したときは、取得したＩＤ番号を第２の記憶領域にキューイングする。一方、第２の記憶領域にＩＤ番号がキューイングされたとき、待機中のスレッドのうち先頭のスレッドから、そのＩＤ番号を取り出して第１の記憶領域にアクセスし、同一ＩＤ番号のキュー領域にキューイングされた発呼要求と複数のメッセージを読み込み、その複数のメッセージに基づく処理を実行させるようにした。
【０００８】
【発明の実施の形態】
以下、本発明に係るマルチスレッドの制御方法について図１乃至図３に基づいて説明する。
図１はマルチスレッド制御方法の概要を示すブロック図、図２及び図３はマルチスレッドの制御を説明するための動作説明図である。
【０００９】
本実施の形態のマルチスレッド制御方法は、例えば電話加入者からのアクセスによる電話交換器上での並列処理を実行させるために、汎用的なマルチスレッドプログラミングを使用している。例えばある呼に対してほぼ同時に複数のメッセージが受信された場合、その受信メッセージを複数のスレッドに割り当てることなく、一つのスレッドで順に処理させるようにしたものである。
【００１０】
このマルチスレッドの制御方法は、図１に示すようにプロセス起動時に、予め生成された親スレッド１１によって、スレッドキュー１２（第２の記憶部）、所定数の子スレッド１３及び排他キュー１４（第１の記憶部）がそれぞれメモリ（図示せず）上に生成される。スレッドキュー１２は、後述する排他ＩＤ（ＩＤ番号）をＦＩＦＯの状態で書き込むためのものである。子スレッド１３が生成される際、子スレッド１３の実行待ち行列が作られる。
【００１１】
排他キュー１４には、予め定められた排他ＩＤ（１〜ｎ）が順に付与され、かつ、排他ＩＤ毎に複数の受信メッセージをキューイングするメッセージキュー領域１４ａが設けられている。また、そのメッセージキュー領域１４ａに受信メッセージをキューイングされているかどうかを判定させるために、その状態を記録する記録判別領域１４ｂが設けられている。例えば、メッセージキュー領域１４ａに受信メッセージがキューイングされていないときは空として「０」が記録され、メッセージキュー領域１４ａが受信メッセージによって塞がっているときは「１」が記録される。
【００１２】
次に、図２及び図３を参照しながら動作を説明する。
親スレッド１１は、例えば発呼要求の受信を検知すると、図２（ａ）に示すように排他キュー１４にアクセスして、まず最初の排他ＩＤのメッセージキュー領域１４ａが空かどうかを記録判別領域１４ｂを通じて判定する。その記録判別領域１４ｂに「１」が記録されているときは、メッセージキュー領域１４ａが受信メッセージによって塞がっていると判断して次段の排他ＩＤに進み、前記と同様にメッセージキュー領域１４ａが空かどうかを判定する。この動作は、記録判別領域１４ｂに「０」が検索されるまで排他ＩＤ毎に順に行われる。
【００１３】
最初の排他ＩＤの記録判別領域１４ｂに「０」が記録されていたときは、その排他ＩＤのメッセージキュー領域１４ａが空であると判断して、その排他ＩＤを取得すると共に、受信された発呼要求をそのメッセージキュー領域１４ａにキューイングし、この発呼要求に対する複数の受信メッセージが続いて受信されたときはそのメッセージキュー領域１４ａに順にキューイングする。この時、記録判別領域１４ｂに記録された「０」が「１」に書き替えられる。この動作は、発呼要求が受信される毎に行われる。
【００１４】
一方、実行待ち行列の中に待機中の子スレッド１３が存在するかどうかを判定し、待機中の子スレッド１３が存在するときは、図２（ｂ）に示すように親スレッド１１により取得された排他ＩＤをその親スレッド１１を通じてスレッドキュー１２にキューイングさせる。この時、排他ＩＤのキューイングをタイミングとして、実行待ち行列の先頭の子スレッド１２が排他ＩＤをスレッドキュー１２から取り出す。
【００１５】
スレッドキュー１２から排他ＩＤを取り出した子スレッド１３は、図２（ｃ）に示すように排他キュー１４にアクセスして、同一の排他ＩＤのメッセージキュー領域１４ａにキューイングされた発呼要求及び複数の受信メッセージを取り出し、かつ、受信メッセージに応じて順に処理を実行する。なお、受信メッセージに優先度が付けられていた場合は、優先順位の高い受信メッセージを選択して処理を実行するようになっている。そして、受信メッセージによる処理が終了したときは、その旨を排他ＩＤと共に親スレッド１１に通知する。
【００１６】
この時、親スレッド１１は、図３に示すように排他キュー１４にアクセスして、通知を受けた排他ＩＤと同一の排他ＩＤの列に設けられた記録判別領域１４ｂ上の「１」を「０」に書き替えてこの排他ＩＤのメッセージキュー領域１４ａを解放し、再利用可能な状態にする。
【００１７】
以上のように本実施の形態においては、発呼要求が受信されたとき、排他キュー１４にアクセスして複数の受信メッセージがキューイングされていないメッセージキュー領域１４ａを検索し、この検索により複数の受信メッセージがキューイングされていないメッセージキュー領域１４ａを確認したときは、その領域１４ａの排他ＩＤを読み込むと共に、その排他ＩＤのメッセージキュー領域１４ａに複数の受信メッセージをキューイングし、そして、排他ＩＤを取得した際に、予め生成された複数の子スレッド１３の中から待機中の子スレッド１３が存在するかどうかを検索し、この検索により待機中の子スレッド１３の存在を確認したときは、取得した排他ＩＤをスレッドキュー１２にキューイングして、待機中の子スレッド１３にその排他ＩＤと同一のメッセージキュー領域１４ａにキューイングされた複数の受信メッセージを読み込ませて処理を実行させるようにしたので、子スレッド１３側では排他処理を意識せずに複数の受信メッセージを順次処理することが可能になり、これにより開発時の規模や期間の削減に繋がるという効果がある。
【００１８】
また、前述したように発呼要求に対する複数のメッセージを処理する子スレッド１３は一つであるため、各発呼処理機能で発呼処理に必要なデータを操作する場合に特別な処理、例えばセマフォによる排他制御を行わなくても複数の子スレッドからの同時アクセスによるデータ破壊を防止できる。
また、タスク乗り換え時のリソースオーバヘッドが削減でき、処理速度の向上が見込める。
【００１９】
なお、本実施の形態は、例えばＵＮＩＸ（登録商標）システム上では汎用的なマルチスレッドプログラミングを使用しているため、イベント処理が継続されるような交換処理以外のアプリケーションにも利用が可能である。
【００２０】
【発明の効果】
以上のように本発明によれば、発呼要求と複数のメッセージが受信されたとき、第１の記憶領域にアクセスして空きのキュー領域を検索し、この検索により空きのキュー領域を確認したときは、そのキュー領域のＩＤ番号を読み込むと共に、そのＩＤ番号のキュー領域に、受信された発呼要求と複数のメッセージをキューイングし、そして、ＩＤ番号を取得した際に、予め生成された複数のスレッドの中から待機中のスレッドが存在するかどうかを検索し、この検索により待機中のスレッドの存在を確認したときは、取得したＩＤ番号を第２の記憶領域にキューイングして、待機中の先頭のスレッドから、そのＩＤ番号と同一のキュー領域にキューイングされた発呼要求と複数のメッセージを読み込ませて処理を実行させるようにしたので、スレッド側では排他処理を意識せずに受信の発呼要求と複数のメッセージを順次処理することが可能になり、これにより開発時の規模や期間の削減に繋がるという効果がある。
【図面の簡単な説明】
【図１】マルチスレッド制御方法の概要を示すブロック図である。
【図２】マルチスレッドの制御を説明するための動作説明図である。
【図３】図２に続く動作説明図である。
【図４】従来のマルチスレッドの制御を説明するための動作説明図である。
【符号の説明】
１１  親スレッド
１２  スレッドキュー
１３  子スレッド
１４  排他キュー
１４ａ  メッセージキュー領域
１４ｂ  記録判別領域
【図１】
0004003113.tif 000002
【図２】
0004003113.tif 000003
【図３】
0004003113.tif 000004
【図４】
0004003113.tif 000005