"バッファリソースの管理方法であって、割り当てリストと割り当て解除リストとを有するようにバッファプールが構成されており、前記割り当てリストは、前のバッファオブジェクトにおいてネクストポインタによって次のバッファオブジェクトへとリンクされる1つ以上のバッファオブジェクトと、前記割り当てリストにおける先頭のバッファオブジェクトの次のバッファオブジェクトを指し示しているヘッドポインタとを有し、前記割り当て解除リストは、前のバッファオブジェクトにおいてネクストポインタによって次のバッファオブジェクトへとリンクされる1つ以上のバッファオブジェクトと、前記割り当てリストにおける先頭のバッファオブジェクトの次のバッファオブジェクトを指し示しているヘッドポインタと、前記割り当てリストの最後に位置するバッファオブジェクトのネクストポインタを指し示しているテールポインタとを有し、前記テールポインタはポインタのポインタであり、初期化の際に、前記割り当て解除リストの前記ヘッドポインタが空にされ、前記割り当て解除リストの前記テールポインタが前記割り当て解除リストの前記ヘッドポインタを指し示すようにされ、前記バッファリソースの管理方法は、引き継ぎアクションとして、前記割り当て解除リストの前記ヘッドポインタを前記割り当てリストの前記ヘッドポインタに割り当てるステップと、前記割り当て解除リストの前記ヘッドポインタをクリーニングして空にするステップと、前記割り当て解除リストの前記テールポインタを当該割り当て解除リストの前記ヘッドポインタを指し示すようにするステップとを有することを特徴とするバッファリソースの管理方法。前記割り当てリストが空かどうかを判定するステップと、前記割り当てリストが空である場合、前記割り当て解除リストが空であるかどうかを判定するステップと、前記割り当て解除リストが空でない場合、前記引き継ぎアクションを実行するステップとをさらに有することを特徴とする請求項1に記載のバッファリソースの管理方法。前記割り当てリストが空でない場合、前記割り当てリストにおける前記先頭のバッファオブジェクトをリンク解除するステップをさらに有することを特徴とする請求項2に記載のバッファリソースの管理方法。前記割り当て解除リストが空である場合、ヒープから複数のバッファオブジェクトを割り当て、当該複数のバッファオブジェクトを前記割り当てリストにリンクするステップをさらに有することを特徴とする請求項2に記載のバッファリソースの管理方法。リクラメーションアクションとして、前記割り当て解除リストにおける前記最後に位置する前記バッファオブジェクトの前記ネクストポインタを、新しく解放されたバッファオブジェクトを指し示すようにするステップであって、前記割り当て解除リストの最後の前記ネクストポインタは前記割り当て解除リストの前記テールポインタによってアドレス指定されている、前記ステップと、前記割り当て解除リストの前記テールポインタを前記新しく解放されたバッファオブジェクトのネクストポインタに移動させるステップとをさらに有することを特徴とする請求項1ないし4のいずれか1項に記載のバッファリソースの管理方法。事後調整アクションとして、前記新しく解放されたバッファオブジェクトが前記割り当て解除リスト内にリンクされた後で、前記割り当て解除リストの前記ヘッドポインタが空かどうかを判定するステップと、前記割り当て解除リストの前記ヘッドポインタが空である場合、前記割り当て解除リストの前記テールポインタを前記割り当て解除リストの前記ヘッドポインタを指し示すようにするステップとをさらに有することを特徴とする請求項5に記載のバッファリソースの管理方法。再リクラメーションアクションとして、前記事後調整アクションの後で、前記割り当てリストの前記ヘッドポインタが空で、かつ、前記新しく解放されたバッファオブジェクトがまだ解放状態であるかどうかを判定するステップと、前記割り当てリストの前記ヘッドポインタが空で、かつ、前記新しく解放されたバッファオブジェクトがまだ解放状態である場合、前記リクラメーションアクションを再度実行するステップとをさらに有することを特徴とする請求項6に記載のバッファリソースの管理方法。前記引き継ぎアクションと前記リクラメーションアクションとはどの位置においても交互に配置可能であることを特徴とする請求項5ないし7のいずれか1項に記載のバッファリソースの管理方法。バッファリソースの管理方法であって、バッファプールが割り当てリストと割り当て解除リストとを有すように構成されており、前記割り当てリストは、前のバッファオブジェクトにおいてネクストポインタによって次のバッファオブジェクトへとリンクされる1つ以上のバッファオブジェクトと、前記割り当てリストにおける先頭のバッファオブジェクトの次のバッファオブジェクトを指し示しているヘッドポインタとを有し、前記割り当て解除リストは、前のバッファオブジェクトにおいてネクストポインタによって次のバッファオブジェクトへとリンクされる1つ以上のバッファオブジェクトと、前記割り当てリストにおける先頭のバッファオブジェクトの次のバッファオブジェクトを指し示しているヘッドポインタと、前記割り当てリストの最後に位置するバッファオブジェクトのネクストポインタを指し示しているテールポインタとを有し、前記テールポインタはポインタのポインタであり、初期化の際に、前記割り当て解除リストの前記ヘッドポインタが空にされ、前記割り当て解除リストの前記テールポインタが前記割り当て解除リストの前記ヘッドポインタを指し示すようにされ、前記バッファリソースの管理方法は、リクラメーションアクションとして、前記割り当て解除リストにおける前記最後に位置する前記バッファオブジェクトの前記ネクストポインタを、新しく解放されたバッファオブジェクトを指し示すようにするステップであって、前記割り当て解除リストの最後の前記ネクストポインタは前記割り当て解除リストの前記テールポインタによってアドレス指定されている、前記ステップと、前記割り当て解除リストの前記テールポインタを前記新しく解放されたバッファオブジェクトのネクストポインタに移動させるステップとを有することを特徴とするバッファリソースの管理方法。事後調整アクションとして、前記新しく解放されたバッファオブジェクトが前記割り当て解除リスト内にリンクされた後で、前記割り当て解除リストの前記ヘッドポインタが空かどうかを判定するステップと、前記割り当て解除リストの前記ヘッドポインタが空である場合、前記割り当て解除リストのテールポインタを前記割り当て解除リストのヘッドポインタを指し示すようにするステップとをさらに有することを特徴とする請求項9に記載のバッファリソースの管理方法。再リクラメーションアクションとして、前記事後調整アクションの後で、前記割り当てリストの前記ヘッドポインタが空で、かつ、前記新しく解放されたバッファオブジェクトがまだ解放状態であるかどうかを判定するステップと、前記割り当てリストの前記ヘッドポインタが空で、かつ、前記新しく解放されたバッファオブジェクトがまだ解放状態である場合、前記リクラメーションアクションを再度実行するステップとことを特徴とする請求項10に記載のバッファリソースの管理方法。通信機器においてバッファリソース管理を実行させるコンピュータ可読命令であって、コンピューティングデバイスによって実行可能であり、請求項1ないし11のいずれか1項に記載された前記バッファリソースの管理方法を実行させるコンピュータ可読命令を備えたコンピュータ可読記憶媒体。割り当て解除リストを有するように構成されたバッファプールを備えた通信機器であって、前記割り当て解除リストは、前のバッファオブジェクト内のネクストポインタによって次のバッファオブジェクトへとリンクされた1つ以上のバッファオブジェクトと、前記割り当て解除リストの先頭に位置するバッファオブジェクトを指し示すヘッドポインタと、ポインタのポインタであるテールポインタであって、前記割り当て解除リストの最後に位置するバッファオブジェクトのネクストポインタを指し示すテールポインタとを有することを特徴とする通信機器。初期化の際に、前記割り当て解除リストの前記ヘッドポインタが空にされ、前記割り当て解除リストの前記テールポインタが前記割り当て解除リストの前記ヘッドポインタを指し示すようにされることを特徴とする請求項13に記載の通信機器。前記バッファプールはさらに割り当てリストを有するように構成されており、前記割り当てリストは、前のバッファオブジェクト内のネクストポインタによって次のバッファオブジェクトへとリンクされた1つ以上のバッファオブジェクトと、前記割り当てリストの先頭に位置するバッファオブジェクトを指し示すヘッドポインタとを有することを特徴とする請求項13または14に記載の通信機器。引き継ぎアクションとして、前記割り当て解除リストの前記ヘッドポインタを前記割り当てリストの前記ヘッドポインタに割り当てるステップと、前記割り当て解除リストの前記ヘッドポインタをクリーニングして空にするステップと、前記割り当て解除リストの前記テールポインタを当該割り当て解除リストの前記ヘッドポインタを指し示すようにするステップとを実行するように構成されたプロセッサをさらに有することを特徴とする請求項13ないし15のいずれか1項に記載の通信機器。前記プロセッサは、さらに、前記割り当てリストが空かどうかを判定するステップと、前記割り当てリストが空である場合、前記割り当て解除リストが空であるかどうかを判定するステップと、前記割り当て解除リストが空でない場合、前記引き継ぎアクションを実行するステップとを実行するように構成されていることを特徴とする請求項16に記載の通信機器。前記プロセッサは、さらに、前記割り当てリストが空でない場合、前記割り当てリストにおける前記先頭のバッファオブジェクトをリンク解除するステップを実行するように構成されていることを特徴とする請求項17に記載の通信機器。前記プロセッサは、さらに、前記割り当て解除リストが空である場合、ヒープから複数のバッファオブジェクトを割り当て、当該複数のバッファオブジェクトを前記割り当てリストにリンクするステップを実行するように構成されていることを特徴とする請求項17に記載の通信機器。リクラメーションアクションとして、前記割り当て解除リストの前記最後に位置する前記バッファオブジェクトの前記ネクストポインタを、新しく解放されたバッファオブジェクトを指し示すようにするステップであって、前記割り当て解除リストの最後の前記ネクストポインタは前記割り当て解除リストの前記テールポインタによってアドレス指定されている、前記ステップと、前記割り当て解除リストの前記テールポインタを前記新しく解放されたバッファオブジェクトのネクストポインタに移動させるステップとを実行するように構成されたプロセッサをさらに有することを特徴とする請求項13ないし15のいずれか1項に記載の通信機器。前記プロセッサは、さらに、事後調整アクションとして、前記新しく解放されたバッファオブジェクトが前記割り当て解除リスト内にリンクされた後で、前記割り当て解除リストの前記ヘッドポインタが空かどうかを判定するステップと、前記割り当て解除リストの前記ヘッドポインタが空である場合、前記割り当て解除リストの前記テールポインタを前記割り当て解除リストの前記ヘッドポインタを指し示すようにするステップとを実行するように構成されていることを特徴とする請求項20に記載の通信機器。ロックメカニズムは、不可避的に余分のタスクスイッチ切り替えを持ち込んでしまう。通常の場合は、全体の性能に大きな影響を与えない。しかし、際どいリアルタイム環境においては、タスク切り替えのオーバヘッドを無視することはできない。例えばLTEのeNBにおいては、TTIのスケジューリングは1msに過ぎないのに対して、1回のタスク切り替えには、約20μsかかり、タスクの中断から再開までの1巡には、少なくとも2回のタスク切り替え手順、すなわち40μsが必要であり、これは、特にトラヒック量が多い場合には、LTEのスケジューリング性能に顕著な影響を与える。たいてい、ベースバンドのアプリケーションは、マルチコアハードウェアプラットフォームで実行され、このプラットフォームは、複数のタスクの並列同時実行を促進して、高い性能を達成する。しかし、ロックメカニズムは、そのような並列モデルを妨害してしまう。ロックの本質は、データの完全性を確保するために、まさに順次実行を強要することにあるからである。ロックを所有する間隔が非常に短いとしても、順次実行は、マルチコアプラットフォームで実行されているアプリケーションに大きな影響を与え、潜在的な性能のボトルネックになることがある。上記の問題の少なくとも1つを解決するために、本発明においては、ロックレスバッファリソース管理方式および同方式を使用する通信機器を提案する。本発明の第1の態様によれば、バッファプールが割り当てリストおよび割り当て解除リストを有するように構成されているバッファリソース管理方法を提供する。割り当てリストは、前のバッファオブジェクトの中のネクスト次のポインタによって次のバッファオブジェクトにリンクされた1つ以上のバッファオブジェクトと、割り当てリストの先頭のバッファオブジェクトを指し示すヘッド先頭ポインタとを有する。割り当て解除リストは、前のバッファオブジェクトの中の次のポインタによって次のバッファオブジェクトにリンクされた1つ以上のバッファオブジェクトと、割り当て解除リストの先頭のバッファオブジェクトを指し示す先頭ポインタと、割り当て解除リストの最後のバッファオブジェクトの次のポインタを指し示すテール末尾ポインタとを有し、この末尾ポインタは、ポインタのポインタである。初期化においては、割り当て解除リストの先頭ポインタはエンプティ空であり、割り当て解除リストの末尾ポインタは、割り当て解除リストの先頭ポインタ自体を指し示す。バッファリソース管理方法は、割り当てリストの先頭ポインタに割り当て解除リストの先頭ポインタの役割を割り当てる工程と、割り当て解除リストの先頭ポインタを空にクリアする工程と、割り当て解除リストの末尾ポインタに割り当て解除リストの先頭ポインタ自体を指示させる工程とである、テイクオーバーアクション引き継ぎ行動の工程を有していてもよい。一実施形態においては、バッファリソース管理方法は、割り当てリストが空であるか否かを判定する工程と、割り当てリストが空である場合に、割り当て解除リストが空であるか否かを判定する工程と、割り当て解除リストが空でない場合に、引き継ぎ行動の工程を行う工程とをさらに有していてもよい。バッファリソース管理方法は、割り当てリストが空でない場合に、割り当てリストの先頭のバッファオブジェクトをリンク解除切り離す工程をさらに有していてもよい。バッファリソース管理方法は、割り当て解除リストが空である場合に、ヒープの中から複数のバッファオブジェクトを取り出す工程と、その複数のバッファオブジェクトを割り当てリストとリンクさせる工程とをさらに有していてもよい。別の実施形態においては、バッファリソース管理方法は、割り当て解除リストの末尾ポインタによってアドレス指定される、割り当て解除リストの最後のバッファオブジェクトの次のポインタに、新しく解放されるバッファオブジェクトを指示させる工程と、割り当て解除リストの末尾ポインタを新しく解放されるバッファオブジェクトの次のポインタに移動させる工程とである、リクラメーションアクション再利用行動の工程をさらに有していてもよい。バッファリソース管理方法は、新しく解放されるバッファオブジェクトが割り当て解除リストの中にリンクされた後、割り当て解除リストの先頭ポインタが空であるか否かを判定する工程と、割り当て解除リストの先頭ポインタが空である場合に、割り当て解除リストの末尾ポインタに割り当て解除リストの先頭ポインタ自体を指示させる工程とである、ポストアジャストメントアクション事後調整行動の工程をさらに有していてもよい。バッファリソース管理方法は、事後調整行動の後、割り当てリストの先頭ポインタが空であるか否か、および新しく解放されたバッファオブジェクトが依然として解放状態にあるか否かを判定する工程と、割り当てリストの先頭ポインタが空であり、かつ新しく解放されたバッファオブジェクトが依然として解放状態にある場合に、再利用行動の工程を再度行う工程とである、再リクラメーションアクション再々利用行動の工程をさらに有していてもよい。一例として、引き継ぎ行動の工程と再利用行動の工程は、どの位置においても交互に配置することができる。本発明の第2の態様によれば、バッファプールが割り当てリストおよび割り当て解除リストを有するように構成されているバッファリソース管理方法を提供する。割り当てリストは、前のバッファオブジェクトの中の次のポインタによって次のバッファオブジェクトにリンクされた1つ以上のバッファオブジェクトと、割り当てリストの先頭のバッファオブジェクトを指し示す先頭ポインタとを有する。割り当て解除リストは、前のバッファオブジェクトの中の次のポインタによって次のバッファオブジェクトにリンクされた1つ以上のバッファオブジェクトと、割り当て解除リストの先頭のバッファオブジェクトを指し示す先頭ポインタと、割り当て解除リストの最後のバッファオブジェクトの次のポインタを指し示す末尾ポインタとを有し、この末尾ポインタは、ポインタのポインタである。初期化においては、割り当て解除リストの先頭ポインタは空であり、割り当て解除リストの末尾ポインタは、割り当て解除リストの先頭ポインタ自体を指し示す。バッファリソース管理方法は、割り当て解除リストの末尾ポインタによってアドレス指定される、割り当て解除リストの最後のバッファオブジェクトの次のポインタに、新しく解放されるバッファオブジェクトを指示させる工程と、割り当て解除リストの末尾ポインタを新しく解放されるバッファオブジェクトの次のポインタに移動させる工程とである、再利用行動の工程を有していてもよい。一実施形態においては、バッファリソース管理方法は、新しく解放されるバッファオブジェクトが割り当て解除リストの中にリンクされた後、割り当て解除リストの先頭ポインタが空であるか否かを判定する工程と、割り当て解除リストの先頭ポインタが空である場合に、割り当て解除リストの末尾ポインタに割り当て解除リストの先頭ポインタ自体を指示させる工程とである、事後調整行動の工程をさらに有していてもよい。バッファリソース管理方法は、事後調整行動の後、割り当てリストの先頭ポインタが空であるか否か、および新しく解放されたバッファオブジェクトが依然として解放状態にあるか否かを判定する工程と、割り当てリストの先頭ポインタが空であり、かつ新しく解放されたバッファオブジェクトが依然として解放状態にある場合に、再利用行動の工程を再度行う工程とである、再々利用行動の工程をさらに有していてもよい。本発明の第3の態様によれば、本発明の第1および第2の態様のうちのいずれか1つによる方法を実行するために、コンピューティングデバイスで実行可能であり、通信機器におけるバッファリソース管理を促進する、コンピュータで読み取り可能な命令を有する、コンピュータで読み取り可能な記憶媒体を提供する。本発明の第4の態様によれば、割り当て解除リストを有するように構成されているバッファプールを有する、通信機器を提供する。割り当て解除リストは、前のバッファオブジェクトの中の次のポインタによって次のバッファオブジェクトにリンクされた1つ以上のバッファオブジェクトと、割り当て解除リストの先頭のバッファオブジェクトを指し示す先頭ポインタと、割り当て解除リストの最後のバッファオブジェクトの次のポインタを指し示す末尾ポインタとを有し、この末尾ポインタは、ポインタのポインタである。一実施形態の初期化においては、割り当て解除リストの先頭ポインタは空であり、割り当て解除リストの末尾ポインタは、割り当て解除リストの先頭ポインタ自体を指し示す。別の実施形態においては、バッファプールは、割り当てリストを有するようにさらに構成されており、割り当てリストは、前のバッファオブジェクトの中の次のポインタによって次のバッファオブジェクトにリンクされた1つ以上のバッファオブジェクトと、割り当てリストの先頭のバッファオブジェクトを指し示す先頭ポインタとを有する。さらに別の実施形態においては、通信機器は、割り当てリストの先頭ポインタに割り当て解除リストの先頭ポインタの役割を割り当てる工程と、割り当て解除リストの先頭ポインタを空にクリアする工程と、割り当て解除リストの末尾ポインタに割り当て解除リストの先頭ポインタ自体を指示させる工程とである、引き継ぎ行動の工程を実行するように構成されたプロセッサをさらに有していてもよい。また別の実施形態においては、プロセッサは、割り当てリストが空であるか否かを判定する工程と、割り当てリストが空である場合に、割り当て解除リストが空であるか否かを判定する工程と、割り当て解除リストが空でない場合に、引き継ぎ行動の工程を行う工程とを実行するようにさらに構成されていてもよい。プロセッサは、割り当てリストが空でない場合に、割り当てリストの先頭のバッファオブジェクトを切り離す工程を実行するようにさらに構成されていてもよい。プロセッサは、割り当て解除リストが空である場合に、ヒープの中から複数のバッファオブジェクトを取り出す工程と、その複数のバッファオブジェクトを割り当てリストとリンクさせる工程とを実行するようにさらに構成されていてもよい。もう1つの実施形態においては、プロセッサは、割り当て解除リストの末尾ポインタによってアドレス指定される、割り当て解除リストの最後のバッファオブジェクトの次のポインタに、新しく解放されるバッファオブジェクトを指示させる工程と、割り当て解除リストの末尾ポインタを新しく解放されるバッファオブジェクトの次のポインタに移動させる工程とである、再利用行動の工程を実行するようにさらに構成されていてもよい。あるいは代わりに、通信機器は、割り当て解除リストの末尾ポインタによってアドレス指定される、割り当て解除リストの最後のバッファオブジェクトの次のポインタに、新しく解放されるバッファオブジェクトを指示させる工程と、割り当て解除リストの末尾ポインタを新しく解放されるバッファオブジェクトの次のポインタに移動させる工程とである、再利用行動の工程を実行するように構成されたプロセッサをさらに有していてもよい。さらに、プロセッサは、新しく解放されるバッファオブジェクトが割り当て解除リストの中にリンクされた後、割り当て解除リストの先頭ポインタが空であるか否かを判定する工程と、割り当て解除リストの先頭ポインタが空である場合に、割り当て解除リストの末尾ポインタに割り当て解除リストの先頭ポインタ自体を指示させる工程とである、事後調整行動の工程を実行するようにさらに構成されていてもよい。プロセッサは、事後調整行動の後、割り当てリストの先頭ポインタが空であるか否か、および新しく解放されたバッファオブジェクトが依然として解放状態にあるか否かを判定する工程と、割り当てリストの先頭ポインタが空であり、かつ新しく解放されたバッファオブジェクトが依然として解放状態にある場合に、再利用行動の工程を再度行う工程とである、再々利用行動の工程を実行するようにさらに構成されていてもよい。一例として、引き継ぎ行動の工程と再利用行動の工程は、どの位置においても交互に配置することができる。別の例として、通信機器は、基地局BS、スイッチ、または進化型ノードBeNBであってもよい。本発明の上記および他の目的、特徴および利点は、添付の図面とともに、本発明の非限定の実施形態についての以下の詳細説明を読むことにより明らかになる。以下、本発明の実施形態について、図面に沿って説明する。以下の説明においては、幾つかの特定の実施形態を説明のためだけに使用している。それらの実施形態は、本発明に対する何らかの限定と理解されるものではなく、その例と理解されるものである。本発明の理解をあいまいにする恐れはあるが、従来の構造および構成については省略する。従来技術によるロックメカニズムは、タスク切り替えの余分のオーバヘッドを持ち込み、並列実行を妨げるので、本発明の1つの目的は、要するに、ロックを除いても、依然としてデータの完全性を確保することにある。最新のOS理論は、ロックメカニズムがマルチタスク環境におけるリソースコンフリクトを解決する唯一の可能な方法であることを証明している。しかし、その理論は、まさに一般事例を対象としたものであるのに対して、特別な事例においては、ロックはもはや必要ないことがある。図1に示すプロデューサおよびコンシューマが関係する事例は、まさにそのような事例の1つであり、この事例は次の特徴を有する。●2つの同時タスクのみ利用可能2つを超えるタスクを有する一般事例とは対照的に、このプロデューサおよびコンシューマの事例は、ちょうど2つのタスクを有する。●一方は読み出し、他方は書き込むどのタスクも読み出しも書き込みもできる一般事例とは対照的に、このプロデューサはバッファプールに主に書き込み、一方コンシューマはバッファプールから主に読み出す。タスクが2つだけあり、それぞれのタスクがバッファプールに対して異なる操作を行う場合、データ構造および処理手順を注意深く設計することによって、ロックを使用することなく、2つのタスクにバッファプールの異なる部分にアクセスさせることが可能である。上記の目的を達成するためには、以下の設計原理の少なくとも1つに従ってもよい。1.クリティカルデータ構造を異なるタスクに分離する。ロックは使用しないが、データ構造を分離する方法は依然として使用してもよく、そうすることにより、データの完全性を広範囲にわたって確保することができる。例えば、あるリンクリスト構造においては、リストの先頭は、2つのタスクが同時にアクセスするクリティカル変数になり、従ってその完全性を保証することは不可能である。しかし、個別のタスクに対して2つの個々のリストを採用する場合、コンフリクトの可能性は大幅に減少する。しかし、時には、同時にアクセスがあることは依然として避けられない。従って、依然としてまた別の技術を導入する必要がある。2.できるだけ少ない数の命令を用いて、それらのクリティカルデータ構造にアクセスする。クリティカルデータ構造にアクセスするとき、if-then-else方式がたいてい採用される。すなわち、最初に状態を確認し、その結果に応じてデータ構造を操作する。しかし、この方式は、より多くのCPU命令を占有して、データの完全性を確保することをさらに難しくする。コード命令が少なければ少ないほど、コンフリクトの可能性は小さくなる。そういうことから、データ構造および処理手順を注意深く設計することによって、クリティカルデータ構造の状態を確認することなく、同じ処理ロジックを採用するように最善を尽くした方がよい。3.クリティカルデータ構造の1つへの同時アクセスが避けられないとき、異なるタスクからの操作が互いに矛盾しないようにしておく方がよい。データ構造を注意深くどのように設計しようと、2つのタスクが同じデータ構造を操作することは常に生じる。ロック同期メカニズムがないと、データ構造に対する2つのタスクの実行シーケンスはランダムであり、その結果は、予測できなくなる。従って、異なるタスクからのコンフリクトする操作を避ける方がよい。ここで、一例の矛盾しないの意味は、読み出し-および-書き込み、または書き込み-および-書き込みが同じ結果を有することを意味しており、2つのタスクが同時にデータ構造にアクセスする場合でさえ、決定性の常に同じ結果を生じることができるということである。4.状態確認を使用する必要があるとき、いったん真と確認されたら、状態が変わらないようにする方がよい。一般的には、状態確認は、処理手順を注意深くどのように設計しようとも避けられない。状態確認は不可分操作ではないので、予期しないタスク切り替えが確認と対応する操作との間に起こることがある。タスクがその実行を再開後に、状態が変わっていることがあり、データを損なうことになる。そういうことから、ロックを使用しない場合、タスク切り替えが確認とそれに続く操作との間に実際に行われる場合でさえ、状態がいったん真または偽と確認されたら、状態自体を確実に変わらないようにした方がよい。本発明の一実施形態においては、ロックレスリソースコンフリクト解決方法を提供する。この方法においては、バッファプールは、割り当てリストおよび割り当て解除リストを有するように構成されている。割り当てリストは、前のバッファオブジェクトの中のネクスト次のポインタによって次のバッファオブジェクトにリンクされた1つ以上のバッファオブジェクトと、割り当てリストの先頭のバッファオブジェクトを指し示すヘッド先頭ポインタとを有する。割り当て解除リストは、前のバッファオブジェクトの中の次のポインタによって次のバッファオブジェクトにリンクされた1つ以上のバッファオブジェクトと、割り当て解除リストの先頭のバッファオブジェクトを指し示す先頭ポインタと、割り当て解除リストの最後のバッファオブジェクトの次のポインタを指し示すテール末尾ポインタとを有し、この末尾ポインタはポインタのポインタである。初期化においては、割り当て解除リストの先頭ポインタは空であり、割り当て解除リストの末尾ポインタは、割り当て解除リストの先頭ポインタ自体を指し示す。バッファリソース管理方法は、割り当てリストの先頭ポインタに割り当て解除リストの先頭ポインタの役割を割り当てる工程と、割り当て解除リストの先頭ポインタを空にクリアする工程と、割り当て解除リストの末尾ポインタに割り当て解除リストの先頭ポインタ自体を指示させる工程とである、テイクオーバアクション引き継ぎ行動の工程を有していてもよい。引き継ぎ行動の工程を実行する前に、バッファリソース管理方法は、割り当てリストが空でない場合に、割り当てリストの先頭でバッファオブジェクトを切り離して、コンシューマタスクに戻る工程と、あるいは、割り当て解除リストが空でない場合に、引き継ぎ行動の工程を実行することによって、割り当てリストが割り当て解除リストを引き継ぐ工程とを有していてもよい。割り当て解除リストが空である場合、複数のバッファオブジェクトがヒープの中から割り当てられ、割り当てリストにリンクされ、その後コンシューマタスクに戻る。バッファリソース管理方法は、割り当て解除リストの末尾ポインタによってアドレス指定される割り当て解除リストの最後のバッファオブジェクトの次のポインタに、新しく解放されるバッファオブジェクトを指示させる工程と、割り当て解除リストの末尾ポインタを新しく解放されるバッファオブジェクトの次のポインタに移動させる工程とである、リクラメーションアクションを再利用行動の工程をさらに有していてもよい。バッファリソース管理方法は、解放されるバッファオブジェクトが割り当て解除リストの最後にリンクされた後、割り当て解除リストの先頭ポインタが空になっている引き継ぎが行われている場合に、結果を引き継ぎと一致させ続けるために、割り当て解除リストの末尾ポインタに割り当て解除リストの先頭ポインタ自体を指示させる工程である、上記再利用に続くポストアジャストメントアクション事後調整行動の工程をさらに有していてもよい。バッファリソース管理方法は、事後調整以降、割り当てリストの先頭ポインタが空になりバッファオブジェクトがコンシューマに既に割り当てられた、かつ新しく解放されたバッファオブジェクトが依然として解放状態にある場合に、バッファ紛失を避けるために、上記再利用行動の工程を再び行う工程である、上記事後調整に続く再リクラメーションアクション再々利用行動の工程をさらに有していてもよい。上記の設計原理1に基づいて、バッファプールは、それぞれ割り当ておよび割り当て解除用の、2つの個別リストを有するように設計されている。詳細には、図2は、それぞれのバッファオブジェクト、ヘッダおよびテールを有する、これら2つの個別リスト割り当てリスト、割り当て解除リストフリーリストとも呼ばれるを示す。図2は、それぞれのバッファオブジェクト、ヘッダおよびテールを有する、一例である割り当てリストおよび一例である割り当て解除リストフリーリストとも呼ばれるを示す。図2を参照すると、グローバルポインタは、次のように記述される。●alloc_head:割り当てリストを指し示すバッファ先頭ポインタ○ポインタはNULLに初期化される。○ヒープ内の大容量メモリに言及している。○引き継ぎ後は、割り当て解除リストの最初のバッファオブジェクトを指し示す。●free_head:割り当て解除リストを指し示すバッファ先頭ポインタ○ポインタはNULLに初期化される。○割り当て解除リストの最初のバッファオブジェクトを指し示す。○引き継ぎ後、ポインタは再びNULLに再設定される。●free_tail:割り当て解除リストの最後のバッファオブジェクトの次のポインタを指し示すバッファ末尾ポインタ○ポインタは初期化においてfree_headを指し示す。○バッファオブジェクトが解放されるたびに、そのバッファオブジェクトは、free_tailによって指示されて割り当て解除リストの最後にリンクされ、free_tailは、解放されたバッファオブジェクトの次のポインタを指し示すように移動される。○引き継ぎ後、free_tailは再びfree_headを指し示すように再設定される。本発明の幾つかの実施形態は、図2に示す割り当て解除リストおよび割り当てリストの少なくとも1つを有するように構成されていてもよいバッファプールを有する、通信機器を提供する。この通信機器は、基地局BS、スイッチまたは進化型ノードBeNBであってもよい。詳細には、割り当て解除リストは、前のバッファオブジェクトの中の次のポインタによって次のバッファオブジェクトにリンクされた1つ以上のバッファオブジェクトと、割り当て解除リストの先頭のバッファオブジェクトを指し示す先頭ポインタfree_headと、割り当て解除リストの最後のバッファオブジェクトの次のポインタを指し示す末尾ポインタfree_tailとを有し、この末尾ポインタは、ポインタのポインタである。割り当てリストは、前のバッファオブジェクトの中の次のポインタによって次のバッファオブジェクトにリンクされた1つ以上のバッファオブジェクトと、割り当てリストの先頭のバッファオブジェクトを指し示す先頭ポインタalloc_headとを有する。図3は、バッファオブジェクトを示す概略図である。図3を参照すると、1つのバッファオブジェクトは、以下のフィールドを有する。●inFreeList:バッファオブジェクトがプールの中にあるか否かを示すブール代数真TRUE:空、偽FALSE:使用このフィールドは、次のルールに従って設定される。○初期化において、フィールドは真に設定される。○コンシューマタスクがプールの中からバッファを割り当てるとき、割り当てリストからリンク解除する切り離す前にフィールドを偽に設定した方がよい。○プロデューサタスクがバッファをプールに解放するとき、割り当て解除リストに付加する前にフィールドを真に設定した方がよい。○コンシューマタスクがバッファをプールに戻すとき、フィールドを真に設定する前にまずバッファを割り当てリストの最初に挿入した方がよい。●コンテンツ[]:char型[]例えば最大2,500バイトの着信パケットを保持する。●長さ実際のバッファコンテンツの長さ。●オフセットアレイ内のコンテンツの開始オフセットであり、前置されるプロトコルヘッダPDCPを保持する。●次続くバッファオブジェクトを指し示す次のポインタ。●魔法数マジックナンバーバッファの所有者を示す任意の隠しフィールドである。このフィールドは、初期化によってプロデューサになっている。バッファオブジェクトは、通常プロデューサタスクによって解放されるからである。しかし、異なる処理を可能にするために、コンシューマタスクが未使用のバッファを解放してプールに戻すとき、コンシューマに修正されてもよい。上記の設計原理2に基づいて、通常のif-then-elseコードモデルの代わりに、各タスクは、クリティカルリソースの先取りと片付け作業を遂行するための2つの命令のみを有する同じコードモデルをまさに使用する。こうすることにより、命令数を少なくしている。その結果、可能な命令シーケンスの組み合わせのセットを大幅に減少させ、全ての場合を列挙することを可能にして、アルゴリズムの正しさを保証している。コンフリクトは、2つのタスクの交互実行によって生じるので、アルゴリズムは、可能なコードシーケンスの組み合わせを全て考慮する必要があり、全ての可能性を確実に列挙する必要がある。1つのタスクがM-1個の命令を有して、可能な命令の交互配置位置がM個あり、他のタスクがその位置で交互配置されるN個の命令を有すると想定すると、全ての可能なコードシーケンスの組み合わせ数は次の通りである。SN,M=SN-1,MSN-1,M-1SN-1,M-2SN-1,1Nを1、2、3から列挙すると、S1,M=M=OMS2,M=S1,MS1,M-1S1,M-2S1,1=MM-1M-21=M1×M/2=OM2S3,M=S2,MS2,M-1S2,M-2S2,1=M1×M/2M×M-1/2M-1×M-2/21=OM3SN,M=OMN上式から、MおよびNが大きい値である場合、コード組み合わせセットの数は膨大な値に達して、全ての可能性を網羅することは極端に難しくなる。まさにこの理由から、クリティカルコードシーケンスは、少ない命令数に限定されている。この点に関しては後で詳述するように、クリティカルコードシーケンスを少ない命令数に減少させた場合でさえ、コンフリクトを生じる操作が、引き継ぎ手順中に依然として起こることがある。ここで、コンシューマタスクは、{free_head=NULL;free_tail=free_head}である2つのクリティカル命令のみを有するように設計されていて、3つの可能な交互配置位置があり、プロデューサタスクは、{free_tail=pNodeDel;free_tail=pNodeDel->next}である2つのクリティカル命令のみを有するように設計されている。実際の状況においては、コンシューマタスクおよびプロデューサタスクのこれらの命令は、どの位置においても交互配置可能である。そういうことから、交互配置コード組み合わせセットの合計数は、SN=2,M=3=S1,3S1,2S1,1=321=6である。実際の実行においては、どのシナリオに相当するかは明確には誰にもわからないので確認することができないからである。確認するとなると、余分の交互配置コード組み合わせセットを持ち込むことになる、最終のコードシーケンスは、どのシナリオが起こるかにかかわらず、結果が常に正しいことを保証できる方がよい。上記の設計原理3に基づいて、上記の全てのシナリオにおいて矛盾しないように、行動を注意深く選択した方がよい。例えば、いったん引き継ぎが検出されると、事後調整中に、割り当て解除リストの末尾ポインタは、戻されて、割り当て解除リストの先頭ポインタを指し示す。末尾ポインタの上記の調整は、引き継ぎ手順と事後調整手順の間でだけ矛盾しないからであり、引き継ぎ行動と再利用行動がどのように互いに交互配置されるかにかかわらず常に正しい。新しい手順がコンフリクトの可能性をより小さい範囲に減少させるように特別な設計を採用している場合でさえ、2つのタスクの交互実行によって引き起こされる副作用は、依然として避けられない。幸いにも、他のタスクのフットプリントを注意深くチェックすることによって、その副作用を完全に取り除くことができる。他のタスクがデータ構造に作用していることを見つけると、副作用を取り除くために、データ構造に特別な調整を行う必要がある。設計原理4に基づくと、他のタスクが作用しても、データ構造の確認状態は安泰である。割り当て解除リストの先頭ポインタがいったん空になると、コンシューマタスクはもはやそれに作用せず、プロデューサタスクが意図的にそれを変更するまで、常にいつまでも空のままになっているからである。プロデューサタスクが意図的にそれを変更するのは、もちろんプロデューサタスク自体とコンフリクトすることはない。その結果、事後調整の正しさを保証する。上記の設計原理1~4に基づいて、コンシューマタスクおよびプロデューサタスク用の動作記述および対応する疑似コードについて、次に示す。割り当てスレッドが、多重定義された新しい演算子を通じて、プールからバッファを割り当てるように要求すると、スレッドの役割に応じて別々の処理が行われる。-コンシューマ通常のシナリオである。リンクが空でない場合、割り当てリストの先頭からバッファオブジェクトを切り離すように常に試みる。リンクが空である場合は、割り当て解除リストが空でない場合に、プロデューサのスレッドから割り当て解除リストを引き継ぐように試み、割り当て解除リストが空である場合に、バッファプールを作成するためにヒープの中から大容量メモリを割り当てるように、独自の新しい機能を呼び出す。-プロデューサそれ自体のプロデューサプールの中からバッファを割り当てる後で詳述する。コンシューマタスクif割り当てリストが空である{if割り当て解除リストが空である{//ヒープの中から取得ヒープの中から1組のバッファを割り当て、それらを割り当てリストにリンクする}else{//引き継ぎ行動alloc_head=free_head;free_head=NULL;free_tail=free_head;}}//バッファオブジェクトの割り当て割り当てリストの先頭からバッファオブジェクトを切り離す割り当て解除割り当て手順と同様に、割り当て解除においても、次の2つのシナリオを区別する必要がある。-プロデューサfree_tailポインタによってのみ割り当て解除リストに作用する。2つのCPU命令で十分である。すなわち、バッファオブジェクトをfree_tailが指示する割り当て解除リストの最後にリンクさせる命令と、free_tailをこのバッファオブジェクトに移動させる命令とで十分である。割り当て解除シナリオが割り当てシナリオの引き継ぎ動作と同時に行われることがあるので、その後、データの完全性を保証するために特別な事後調整が依然として必要である後で詳述する。-コンシューマプロデューサとの衝突を避けるために、コンシューマタスクからの割り当て解除手順は、割り当てリストの最初にバッファを挿入することで、割り当てリストに作用するだけである。プロデューサタスクif{free_tail==free_head{//引き継ぎとのコンフリクトを解決する//free_tailをフリーリストの最後に移動させるwhilefree_tail=NULL{free_tail=free_tail->next}}//バッファオブジェクトをフリーリストの最後にリンクするfree_tail=pNodeDel;free_tail=pNodeDel->next;//事後調整iffree_headが空である場合{free_tail=free_head;}これらに対応するものとして、図4は、一例であるコンシューマタスクのフロー図を示し、図5は、一例であるプロデューサタスクのフロー図を示す。本発明の幾つかの実施形態においては、図2に示すバッファプールを有する通信機器は、上記のコンシューマタスクの1つ以上の工程および/または上記の手順タスクの1つ以上の工程を行うように構成されたプロセッサをさらに有していてもよい。上述のように、割り当て解除は、引き継ぎ動作と同時に起こることがある。コード命令交互配置効果のせいで、free_tailが今解放されるバッファに移動されたときに、コンシューマタスクに引き継がれていることがあり、この場合、free_tail点は正しくなくなり、末尾ポインタの正しさを維持するために、余分の調整が必要になることがある。データの完全性を維持するために、事後調整が、free_headを確認する割り当て解除手順に続いて常に行われる。free_headが空である場合は、引き継ぎが本当に行われたことを意味しており現在の割り当て解除は、free_headを空にしたまま終わってはいけない、free_tailをfree_headに再設定する。これは、引き継ぎ行動と全く同じであるが、矛盾のない結果を生じる設計原理3を参照。free_headは、引き継ぎ行動によっていったん空に設定されると、もはや変わらない。それ故、上記の確認は信頼でき、事後調整において使用することができる。しかし、非空のfree_headの確認は、非空のfree_headが引き継ぎ行動によって空に再設定されうるので信頼できず、従って、事後調整においては使用されない。事後調整は、引き継ぎと再利用との間のコンフリクトを解決することができるが、バッファ紛失の問題は依然として存在することがあり、次のように生じる。●割り当てリストにバッファがなく、割り当て解除リストに1つだけバッファが残されている。●割り当て解除において、割り当て解除リストの最後のオブジェクト唯一のバッファオブジェクトをfree_tailによって指示してもらい、その次のポインタへリンクしようと試みるまさにその前に、タスク切り替えが起こり、割り当て解除リストから唯一のバッファオブジェクトを引き継いでコンシューマタスクに割り当て、次いでalloc_headは再びNULLに設定される。●プロデューサタスクは、何事も起こらなかったかのように、その実行を再開して続行する。この場合、プロデューサタスクは、依然として前のバッファオブジェクト割り当てられているを使用して、解放されるバッファをリンクする。解放されたバッファは、もはやどの既知のポインタからも参照されないので漏れる。上記のバッファ紛失問題を解決するために、バッファ紛失検出手順が導入されてもよい。このために、割り当てリストがヒープの中から割り当てられた新しいバッファオブジェクトを有するか、それとも割り当て解除リストから引き継がれた再利用のバッファオブジェクトを有するかを示すために、追加のグローバル変数であるNewfromHeapブール代数も、本実施形態において定義される。●NewfromHeap:割り当てリストがヒープの中から割り当てられた新しいバッファオブジェクトを有するか、それとも割り当て解除リストから引き継がれた再利用のバッファオブジェクトを有するかを示すブール代数。○変数は、初期化において偽に設定される。○ヒープの中から大容量メモリが割り当てられて、alloc_headによって参照されるたびに、変数は真に設定される。○引き継ぎ後、変数は偽に再設定される。以下の条件を確認することによって、上記のバッファ紛失状態の事例に狙いを定める。●free_head==NULLバッファ紛失の前提条件である引き継ぎが本当に起こっていることを意味している。●inFreeList==TRUE真バッファが割り当てられていないことを意味しており、紛失する可能性がある。●alloc_head==NULL||NewfromHeap割り当て解除リストから引き継がれた唯一のバッファオブジェクトが割り当てられており、バッファ紛失が生じていることを意味する。上記の条件が満足される場合、バッファ紛失が生じ、再び再利用される必要がある。2回目の再利用は、割り当て解除リストが空になっているので、成功するであろう。引き継ぎ行動は再び起こることはなく、安全に割り当て解除リストにリンクされうる。この関連で、プロデューサタスクの疑似コードは、次のように修正されてもよい。プロデューサタスクfor{iffree_tail==free_head{//引き継ぎとのコンフリクトを解決する//free_tailをフリーリストの最後に移動させるwhilefree_tail=NULL{free_tail=free_tail->next}}//バッファオブジェクトをフリーリストの最後にリンクするfree_tail=pNodeDel;free_tail=pNodeDel->next;//事後調整iffree_headが空である{free_tail=free_head;//バッファ紛失検出ifpNodeDel->inFreeList==TRUEalloc_head==NULL||NewfromHeap{continue;}}break;}図6は、一例であるバッファ紛失検出を有するプロデューサタスクのフロー図を示す。本発明の幾つかの実施形態における図2に示すバッファプールを有する通信機器は、バッファ紛失検出を有する上記のプロデューサタスクの1つ以上の工程を実行するように構成されたプロセッサをさらに有していてもよい。提案のロックレスバッファリソース管理方式は、リソースを解放するだけの1つのプロデューサと、リソースを割り当てるだけの1つのコンシューマとのシナリオに、たいてい適用される。場合によっては、プロデューサも、リソースを割り当てる必要があることもある。他方では、コンシューマタスクも、未使用のリソースを解放してバッファプールに戻す必要があることもある。この状況において、プロデューサは、コンシューマとの衝突を避けるために、もう1つ個別のプール他のタスクはこのプールにアクセスしないので、リンクされるリストは1つだけで十分であるからリソースを割り当ててもよい。プロデューサタスクのリソース割り当ての可能性はコンシューマタスクのようには高くないので、別のプールを管理するためのオーバヘッドは依然として受け入れ可能である。コンシューマ側に関しては、コンシューマは、未使用のバッファオブジェクトを割り当てリストの最初に挿入することによって未使用リソースを解放してもよい。割り当てリストは、コンシューマタスク自体だけが作用するので、割り当てリストに衝突は少しももたらさない。提案のロックレスバッファリソース管理方式は、1ms期間当たり少なくとも60μsのタスク切り替えのオーバヘッドを減少することと、フルレートダウンリンク帯域幅80Mbpsおよびエアインタフェース帯域幅20Mbpsのユーザデータ量で、約10の性能の向上を達成することが証明されている。本発明の他のアレンジメントには、方法実施形態の工程および動作を実行するソフトウェアプログラムを含む。これについては、まず概要を述べ、それから詳細に説明する。より具体的には、コンピュータプログラムプロダクトは、コンピュータプログラムロジックがその上に符号化されたコンピュータで読み取り可能な媒体を備えるような実施形態である。コンピュータプログラムロジックは、コンピュータデバイスで実行されるとき、上述のロックレスバッファリソース管理方式を提供するための対応する動作を提供する。コンピュータプログラムロジックは、コンピュータシステムの少なくとも1つのプロセッサで実行されるとき、その少なくとも1つのプロセッサが、本発明の実施形態の動作方法を実行することを可能にする。本発明のそのようなアレンジメントは、光媒体例えば、CD-ROM、ソフトディスクまたはハードディスクなどのコンピュータで読み取り可能な媒体上で提供されるか、またはそれらに符号化されたソフトウェア、コードおよび/または他のデータ構造;1つ以上のROMまたはRAMまたはPROMのチップ上のファームウェアまたはマイクロコードなどの他の手段;あるいは特定用途向け集積回路ASIC;あるいは1つ以上のモジュールの中のダウンロード可能なソフトウェアイメージおよび共有データベース等として典型的に提供される。ソフトウェア、ハードウェア、またはそのようなアレンジメントは、コンピュータデバイスの1つ以上のプロセッサが本発明の実施形態によって述べられる技術を行うことができるように、コンピュータデバイスに搭載されてもよい。例えば他のエンティティのデータ通信デバイスまたはコンピュータデバイスのグループなどと一緒に動作しているソフトウェアプロセスも、本発明のノードおよびホストを提供してもよい。本発明によるノードおよびホストも、複数のデータ通信デバイス上の複数のソフトウェアプロセス、または小さい特定のコンピュータのグループ上で実行される全てのソフトウェアプロセス、または単一のコンピュータ上で実行される全てのソフトウェアプロセスの間で分散されてもよい。システムの態様のハードウェア実施とソフトウェア実施との間には、差異はほとんど残されていない。ハードウェアまたはソフトウェアの使用は、一般にしかし、ある状況においては、ハードウェアにするかソフトウェアにするかの選択は重要なことがあるので、常にではない、費用対効率のトレードオフを意味する設計の選択である。本明細書に記載のプロセスおよび/またはシステムおよび/または他の技術に影響を及ぼすことがある種々の媒介物があり例えば、ハードウェア、ソフトウェアおよび/またはファームウェア、好ましい媒介物は、プロセスおよび/またはシステムおよび/または他の技術が配備される状況とともに変わる。例えば、開発者が速度と精度が最重要であると判断する場合、開発者は、主にハードウェアおよび/またはファームウェア媒介物を選択してもよい。柔軟性が最重要である場合、開発者は、主にソフトウェア実施を選択してもよい。また別の代替として、開発者は、ハードウェア、ソフトウェアおよび/またはファームウェアの組み合わせを選択してもよい。これまでの説明は、本発明の実施形態のみを挙げており、本発明を少しも限定する意図はない。従って、本発明の精神および原理内で行われる修正、置換、改善などのいずれも、本発明の範囲に包含されるものである。<略語集>BS基地局eNB進化型ノードBLTEロングタームエボリューションMAC媒体アクセス制御OSオペレーティングシステムPDCPパケットデータ収束プロトコルPDUパケットデータユニットRLC無線リンク制御TTI送信時間間隔UPユーザプレーン"