(57)【特許請求の範囲】
【請求項１】
参照カウントメカニズムを使用して競合管理を容易にするコンピュータ実行方法であって、
複数のトランザクションデータ構造をコンピュータが割り当てるステップであって、トランザクションデータ構造を型固定にし、前記トランザクションデータ構造の型が変化しないことを保証するが前記トランザクションデータ構造のコンテンツが並列して実行されているトランザクションによって変更されることを可能にすることを含む、ステップと、
２つのトランザクション間でコンフリクトが発生したことが検出される場合に、２つのトランザクションのうちの１つである所有トランザクションに関する情報を前記コンピュータが取得するステップであって、前記検出および取得が前記２つのトランザクションのうちの第２のトランザクションによって行われる、ステップと、
前記所有トランザクションに付随する特定のトランザクションデータ構造内の参照カウントを前記コンピュータがインクリメントするステップと、
正確なトランザクションデータ構造の参照カウントがインクリメントされたかどうかを前記コンピュータが判定するステップと、
前記正確なトランザクションデータ構造の参照カウントがインクリメントされたと判定される場合に、前記所有トランザクションを停止するか否か、前記第２のトランザクションを停止するか否か、または前記所有トランザクションを待つか否かを決定することを含む、前記コンフリクトを扱うやり方について前記コンピュータが競合管理判定を行うステップと、
前記正確なトランザクションデータ構造の参照カウントがインクリメントされなかったと判定される場合に、前記コンピュータが、前記参照カウントをデクリメントし、さらに高いレベルでのロックを再試行するステップと
を含むことを特徴とする方法。
【請求項２】
前記判定するステップは、オブジェクト内のロック情報を追跡して前記所有トランザクション情報を取得することによって行われることを特徴とする請求項１に記載の方法。
【請求項３】
所有トランザクション情報が、オブジェクトに付随するロック情報を追跡することによって取得されることを特徴とする請求項１に記載の方法。
【請求項４】
コンピュータによって実行されると、請求項１に記載の方法を前記コンピュータに実行させるコンピュータ実行可能命令を有することを特徴とするコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、競合管理を向上させる方法に関する。より詳細には、本発明は、型固定方法を提供して競合管理を向上させる方法および参照カウントメカニズムを使用して競合管理を容易にする方法に関する。
【背景技術】
【０００２】
トランザクショナルメモリ（transactional memory）は、並列プログラムがさらに単純に書き込みされることを可能とするメカニズムである。トランザクションは、実行するコードの順序を、あたかも当該コードが別々に実行されるが如く特定する。実際、トランザクションは、並列して実行可能なので、データアクセスのコンフリクト（conflict）が検出される。コンフリクトが発生したときに何をするかの判定、すなわち「競合管理（contention management）」は、トランザクションシステムの性能に大きな影響を及ぼす。
【０００３】
しかし、競合マネージャの実装においては重大な根本的問題が存在する。トランザクションTx1がトランザクションTx2との競合を検出すると仮定する。Tx2が、Tx1もロックすることを望むデータアイテムにおけるペシミスティック書き込みロック（pessimistic write lock）を保持するかもしれない。いくつかの場合において、競合マネージャがTx1にロックを取得することを可能とさせてTx2を停止することは、理にかなっている。Tx2が短くかつTx1が長いために、Tx2のワーク（work）を停止した後に再実行（Redo）するコストがTx1のワークを再実行するよりも著しく低いかもしれない。
【０００４】
しかし、この例示の場合、Tx1は競合を通知されるので、競合管理判定のロジックを実行するのに適していると思われる。しかし、このようにするためには、Tx1は、Tx2の実行に関する統計、Tx2のトランザクションログの内容等のTx2に関する情報が必要であるか、またはTx2を自発的に停止させて取得したロックを解放することを要求する必要があるかもしれない。この情報は、トランザクションTx2を示すデータ構造内に存在するのが最も普通である。効率性のために、当該データ構造は、任意のグローバル（広範）なデータ構造内ではなく、Tx2を実行するスレッドだけに保持されるのが望ましい。当該トランザクショナルメモリシステムは、共有され得るデータアイテムの各々をカバーするいくつかのロックデータ構造（locking data structure）を定義する。ある場所が書き込みロックされた場合、このロックデータ構造は、当該ロックを保持するトランザクションの何かしらの表示（indication）を含む。Tx1が、アクセスしようとしたデータアイテムが書き込みロックされていることを認識した場合、Tx1は、そのロックデータ構造を読み込んでTx2のID（identity）を認識することが可能である。この問題の最も困難な点は、Tx1が一度Tx2を示すデータ構造へのポインタを取得して当該データ構造から情報を読み込む準備をした時点で、Tx2が完了し得、当該データ構造の割り当てが解除され（deallocate）得、他の目的のために再割り当て（reallocate）されてしまうかもしれないことである。この場合、Tx1がTx2に関して読み込む情報は不安定である。
【発明の概要】
【０００５】
様々な技術及び方法は、競合管理を強化する型固定方法を提供するために開示される。トランザクショナルメモリシステムは、トランザクションに他のトランザクションを示すデータ構造を安全に分析することを可能とさせる参照カウント（reference counting）メカニズムを提供する。２つのトランザクション間のコンフリクトの解消（「競合管理」と称される）は、参照カウントメカニズムを使用することで容易になる。例えば、１のトランザクションが他のトランザクションが所有する排他的ロックを取得しようと試行する故に、所有トランザクション（owning transaction）に関する情報が取得される。当該所有トランザクションを示すデータ構造の参照カウントがインクリメントされる。当該システムは、正確なトランザクションデータ構造の参照カウントがインクリメントされることを保証して、当該データ構造の割り当てが解除されること及び当該データ構造が再割り当てされて他のトランザクションを示すことを防止する。当該所有トランザクションが、コンフリクトを起こしたロックを保持し続けている場合、当該所有トランザクションデータ構造内の情報は、２つのトランザクションの１つを停止するかまたは当該所有トランザクションが当該ロックを解放するのを待つかのどちらを行うかを決定する競合管理判定に情報を提供する。
【０００６】
競合管理判定が行われた場合、当該所有トランザクションデータ構造の参照カウントは、以前に当該参照カウントをインクリメントした当該コンフリクトしているトランザクションによってデクリメントされる。トランザクションデータ構造の各々の参照カウントは１から始まり、各々のトランザクションが完了すると、当該各々のトランザクションは、自身のデータ構造の参照カウントをデクリメントする。他のスレッド内のコンフリクトしているトランザクションが当該データ構造にアクセスしている間、０でない参照カウントがトランザクションデータ構造の割り当ての解除を防止する。データ構造は、参照カウントが０になった際に割り当てを解除され得る。
【０００７】
１つの実装例において、専用の型固定アロケーションプール（type stable allocation pool）は、不安定属性（unstable attribute）を使用して減少させられ得る。スレッド不安定属性は、トランザクションデータ構造へのポインタがスレッドによって取得される前に設定され、当該ポインタの使用が完了した後に解除される。ガーベジコレクションが停止している間、スレッド不安定属性がいずれのスレッドにおいても設定されていない場合、型固定アロケーションプール内のオブジェクトは、削除のみされ得る。
【０００８】
この発明の概要は、「発明を実施するための形態」において詳述されるいくつかの概念を、単純な形式で紹介するために提供される。この発明の概要は、特許請求の範囲に記載の発明の重要な特徴または本質的な特徴を特定することを意図しておらず、特許請求の範囲に記載の発明の範囲を決定するために使用されることも意図していない。
【図面の簡単な説明】
【０００９】
【図１】１つの実装例のコンピュータシステムの略図である。
【図２】図１のコンピュータシステム上で動作する１つの実装例のトランザクショナルメモリアプリケーションの略図である。
【図３】図１のシステムの１つの実装例のハイレベルプロセスフロー図である。
【図４】図１のシステムの１つの実装例のプロセスフロー図であって、トランザクションログセグメントを型固定とするステップに含まれるステージを示した図である。
【図５】図１のシステムの１つの実装例のプロセスフロー図であって、トランザクションデータ構造を型固定とするステップに含まれるステージを示した図である。
【図６】図１のシステムの１つの実装例のプロセスフロー図であって、参照カウントメカニズムを使用するロックを保持するトランザクションによって行われる動作を示す図である。
【図７】図１のシステムの１つの実装例のプロセスフロー図であって、競合を通知する参照カウントメカニズムを使用するトランザクションによって行われる動作を示す図である。
【図８】２つのトランザクション間で参照カウントメカニズムを使用する１つの実装例の略図である。
【図９】図１のシステムの１つの実装例のプロセスフロー図であって、不安定属性を使用して専用の型固定アロケーションプールを減少させるステップ内に含まれるステージを示す図である。
【図１０】型固定メモリへのポインタの位置をトラッキングすることによって専用の型固定アロケーションプールを減少させる代替実装例を示したプロセスフロー図である。
【発明を実施するための形態】
【００１０】
本明細書内の技術及び方法は、全体としてトランザクショナルメモリに関して説明され得るが、当該技術及び方法はこれらに加えて他の用途も提供する。１つの実装例において、本明細書で説明される１または複数の方法がMicrosoft（登録商標）.NET Framework等のフレームワークプログラム内の特徴として実装され得るか、または開発者にソフトウェアアプリケーションを開発するためのプラットフォームを提供する任意の他のタイプのプログラムもしくはサービスによって実装され得る。他の実装例において、本明細書で説明される１または複数の方法は、同時実行環境において実行されるアプリケーションの開発に対応する他のアプリケーションに特徴として実装される。
【００１１】
１つの実装例において、型固定方法を使用してロックフリーな競合管理が可能とされるトランザクショナルメモリシステムが提供される。１つの実装例において、１のトランザクションが他のトランザクションを示すデータ構造を安全に分析することが可能とされる参照カウントメカニズムが提供される。本明細書で使用される用語「参照カウントメカニズム」は、他のトランザクションが特定の時点において所与のトランザクションデータ構造に関心を有するかどうかを示す当該所与のトランザクションデータ構造に関する数または他のデータをトラッキングする方法、及び他のトランザクションが関心を有している間に当該所与のトランザクションデータ構造が割り当てを解除される（型固定アロケーションプールに戻される）ことを回避する方法を含む。本明細書で使用される用語「型固定アロケーションプール」は、メモリのプール（pool）を意味し、オブジェクトが当該メモリのプールから特別な方法で割り当てられる。すなわち、一度ブロックが割り当てられてオブジェクトの型Ｔが示されると、当該メモリは他の型Ｕを示すために再使用されることはない。従って、当該Ｔへのポインタは、いつでもＴを示すと仮定され得る。本明細書で使用される用語「安全に分析する（safely examine）」は、分析の処理中に分析されているデータが割り当てを解除されることを許容しない態様でデータを分析する能力を含む。トランザクションデータ構造の参照カウントは、当該トランザクションデータ構造への関心を示すトランザクションによって互いにインクリメントされる。参照カウントの各々は、関心が無くなった際にデクリメントされる。もちろん、トランザクションの各々は、当該トランザクションの各々を示すデータ構造に「関心（interest）」を有するので、これらは参照カウント１とともに割り当てられ、トランザクションが完了すると、このトランザクションデータ構造の参照カウントはデクリメントされる。データ構造は、当該データ構造の参照カウントがゼロになるまで割り当てを解除され得ない。他の実装例において、専用の型固定アロケーションプールは、ガーベジコレクタによって認識される不安定属性を使用することによって安全に解放され得る。スレッド不安定属性は、トランザクションデータ構造へのポインタがスレッドによって取得され得る前に設定され、当該ポインタの全ての使用が完了した後にリセットされる。ガーベジコレクションが停止している間、スレッド不安定属性がいずれのスレッドにおいても設定されていない場合には、型固定アロケーションプール内のオブジェクトは、削除されることのみが可能である。
【００１２】
図１に示されているように、当該システムの１または複数の部分を実装するために使用する例示のコンピュータシステムは、コンピュータデバイス１００などのコンピュータデバイスを含む。最も基本的な構成において、コンピュータデバイス１００は、通常は、少なくとも１つの処理ユニット１０２及びメモリ１０４を含む。コンピュータデバイスの構成及びタイプに応じて、メモリ１０４は、揮発性（ＲＡＭ等）、不揮発性（ＲＯＭ、フラッシュメモリ等）またはこれら２つの組み合わせであり得る。この最も基本的な構成は、破線１０６によって図１に示されている。
【００１３】
さらに、デバイス１００は、追加の特徴／機能を有してもよい。例えば、デバイス１００は、追加の記憶装置（リムーバブル／非リムーバブル）を含んでも良く、当該記憶装置は、限定する訳はないが、磁気ディスクもしくはテープまたは光学ディスクもしくはテープを含む。このような追加の記憶装置は、リムーバブル記憶装置１０８及び非リムーバブル記憶装置１１０によって図１に示されている。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールまたは他のデータ等の情報を記憶する任意の方法または技術において実装される揮発性及び不揮発性媒体、リムーバブル及び非リムーバブル媒体を含む。メモリ１０４、リムーバブル記憶装置１０８及び非リムーバブル記憶装置１１０は、全てコンピュータ記憶媒体の例示である。コンピュータ記憶媒体は、限定するわけではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（digital versatile disk）または他の光学記憶媒体、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイスまたは任意の他の媒体であって、所望の情報を保存するために使用可能でありかつデバイス１００によってアクセスされることが可能である媒体を含む。このようなコンピュータ記憶媒体の全ては、デバイス１００の一部であり得る。
【００１４】
コンピュータデバイス１００は、１または複数の通信接続１１４を含み、通信接続１１４は、コンピュータデバイス１００が他のコンピュータ／アプリケーション１１５と通信することを可能とする。デバイス１００は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス等の入力デバイス１１２を有していてもよい。ディスプレイ、スピーカ、プリンタ等の出力デバイス１１１も含まれ得る。これらのデバイスは、当技術分野で周知であるので、ここにおいて詳細に説明する必要は無い。１つの実装例において、コンピュータデバイス１００は、トランザクショナルメモリアプリケーション２００を含む。トランザクショナルメモリアプリケーション２００は、図２で詳述されるだろう。
【００１５】
図１を参照しつつ図２をみると、コンピュータデバイス１００上で動作するトランザクショナルメモリアプリケーション２００が示されている。トランザクショナルメモリアプリケーション２００は、コンピュータデバイス１００上に存在するアプリケーションプログラムの１つである。しかし、トランザクショナルメモリアプリケーション２００は、代替的にまたは追加的に、１または複数のコンピュータ及び／または図１に示されたのと異なる変形例にコンピュータ実行可能命令として含まれ得ることが理解されるだろう。代替的にまたは追加的に、トランザクショナルメモリアプリケーション２００の１または複数の部分は、システムメモリ１０４の一部であり得、これらは他のコンピュータ及び／またはアプリケーション１１５上に存在し得る。さらに、コンピュータソフトウェア技術分野の当業者が想到するだろう他の変形例も採用することができる。
【００１６】
トランザクショナルメモリアプリケーション２００は、プログラムロジック（program logic）２０４を含む。プログラムロジック２０４は、本明細書で説明されるいくつかまたは全ての技術の実行に関与する。プログラムロジック２０４は、競合マネージャを提供するロジック２０６、トランザクションログセグメントを型固定とするロジック２０８（図４を参照して以下に説明される）、トランザクションデータ構造を型固定とするロジック２１０（図５を参照して以下に説明される）、参照カウントメカニズムを使用して第１のトランザクションが第２のトランザクションの状態を安全に分析することを可能とするロジック２１２（図６〜図８を参照して以下に説明される）、専用の型固定アロケーションプールを必要に応じて減少させるロジック２１４（図９〜図１０を参照して以下に説明される）及びアプリケーションを動作させる他のロジック２２０を含む。
【００１７】
図１〜図２を参照しつつ図３〜図１０をみると、トランザクショナルメモリアプリケーション２００の１または複数の実装例の実装のためのステージが、さらに詳細に説明されている。いくつかの実装例において、図３〜図１０のプロセスは、コンピュータデバイス１００のロジックの動作において少なくとも部分的に実装される。図３は、トランザクショナルメモリアプリケーション２００のハイレベルプロセスフロー図である。図３はある順序において記載されているが、順序は意図されたものではなく、図３に示された特徴及び／または動作は、他の順序で提供及び／または実行され得る。当該プロセスは、スタートポイント２４０で開始し、図４で詳述されているように、トランザクションログセグメントを型固定とする（ステージ２４２）。型固定は、型固定ポインタによって指し示されたオブジェクトが当該示されたタイプであることを保証する。同時実行環境において、指示対象のオブジェクトのコンテンツは、並列スレッドによって変更させられ得るが、当該オブジェクトの型は変化しないだろう。当該システムは、図５に詳述されているようにトランザクションデータ構造を型固定とする（ステージ２４４）。図６〜図８に詳述されているように、参照カウントメカニズムが使用されて、関心を持たれているトランザクションデータ構造の割り当て解除を他のトランザクションが防止することが可能とされる（ステージ２４６）。図９及び図１０に詳述されているように、当該システムは、必要に応じて専用の型固定アロケーションプールを選択的に減少させる（ステージ２４８）。当該プロセスは、エンドポイント２５０で終了する。
【００１８】
図４は、トランザクションログセグメントを型固定とするステージの１つの実装例を示している。図４はある順序において記載されているが、順序は意図されたものではなく、図４に示された特徴及び／または動作は、他の順序で提供及び／または実行され得る。当該プロセスは、スタートポイント２７０で開始し、ポインタがログセグメント内へのポインタである場合に、その後も当該ポインタが同じ状態であり続けることを保証する（ステージ２７２）。当該システムは、全てのログセグメントを同一サイズとし、それらの割り当てサイズに従って整列させる（ステージ２７４）。当該システムは、データ構造の所有トランザクションを示すデータ構造へのポインタからログセグメントの各々を開始する（ステージ２７６）。ログセグメント内の書き込みログエントリへのポインタが与えられ、ログセグメントの開始点へのポインタが演算され得る（ステージ２７８）。当該プロセスは、エンドポイント２８０で終了する。
【００１９】
図５は、トランザクションデータ構造を型固定とすることに関するステージの１つの実装例を示している。当該プロセスは、スタートポイント２９０で開始し、増大するのみのトランザクションデータ構造のグローバルプール（global pool）を提供する（ステージ２９２）。割り当てをさらに効果的にするために、それらの中サイズの（medium sized）チャンク（chunk）がスレッドローカルアロケーションプールに与えられる（ステージ２９４）。このことは、トランザクションデータ構造への所与のポインタが安全にデリファレンス（dereference）できるようにする。当該プロセスは、エンドポイント２９８で終了する。
【００２０】
図６は、参照カウントメカニズムに関与しているロック保持トランザクションによって行われる動作の１つの実装例を示している。当該プロセスは、３１０で開始し、新規に割り当てられたトランザクションデータ構造に参照カウント１を与え、当該トランザクションデータ構造が示すトランザクションによる使用を示す（ステージ３１２）。トランザクションの各々が完了した際、当該トランザクションの各々は、自身のトランザクションデータ構造の参照カウントをデクリメントする（ステージ３１４）。参照カウントが０になる場合、当該データ構造は割り当てを解除され得る（ステージ３１６）。参照カウントが０よりも大きい場合、当該データ構造は割り当てを解除されず、割り当て解除義務は、最終的に参照カウントを０まで減少させるトランザクションに回される（ステージ３１８）。当該プロセスはエンドポイント３２０で終了する。
【００２１】
図７は、競合を通知する参照カウントメカニズムに関与しているトランザクションによって行われる動作の１つの実装例を示している。当該プロセスは、スタートポイント３４０で開始し、オブジェクト内のロック情報を追跡して、所有している可能性のあるトランザクションを示すデータ構造へのポインタを取得する（ステージ３４２）。参照カウントは、当該所有している可能性のあるトランザクションのデータ構造内でインクリメントされる（ステージ３４４）。当該オブジェクト内のロック情報を再度追跡し、正確なトランザクションデータ構造の参照カウントがインクリメントされたかを判定する（判定ポイント３４６）。当該ロック情報が同一のトランザクションデータ構造に付随し続けている場合、当該トランザクションデータ構造は、「正確なトランザクション」に関するものである。当該正確な参照カウントがインクリメントされていなかった場合、当該所有している可能性のあるトランザクションのデータ構造の参照カウントがデクリメントされ、ロックがさらに高いレベルで再試行される（ステージ３４８）。
【００２２】
当該正確なトランザクションデータ構造の参照カウントがインクリメントされていた場合（判定ポイント３４６）、競合しているトランザクションを停止するかもしくは自身（当該競合を知されたトランザクション）を停止するかまたは当該競合しているトランザクションが当該ロックを解放するのを待つか、について競合管理判定が行われる（ステージ３５０）。その後、所有トランザクションデータ構造の参照カウントがデクリメントされ、当該デクリメントが当該参照カウントを０にする場合、当該データ構造は削除される（ステージ３５２）。当該プロセスはエンドポイント３５４で終了する。
【００２３】
図８は、２つのトランザクション間での参照カウントメカニズムの使用の１つの実装例の略図である。第１のトランザクション３６２は、データ構造３６４及びトランザクションログセグメント３６６を有する。第２のトランザクション３６３も、データ構造３６５及びトランザクションログセグメント３６７を有する。第２のトランザクション３６３が、競合オブジェクト３６９の故に第１のトランザクション３６２のデータ構造に関心を示す場合、第２のトランザクション３６３は、当該競合オブジェクト３６９内のロック情報を読み込んで当該オブジェクトがロックされていることを認識し、第１のトランザクション３６２が当該ロックを保持していることを認識する。この実装例において、競合オブジェクト３６９内の当該ロック情報は、ロックしているトランザクション３６２のログ内のエントリ（entry）へのポインタを含み、当該ログは当該ロックに関するさらなる情報を含んでいる。上述したように、ログセグメントは、当該ログセグメントの所有トランザクションデータ構造３６４へのポインタを含んでいる。他の実装例において、他のロックメカニズムが使用されて、ロックを所有するトランザクションに関するデータ構造が認識され得る。例えば、ロック情報は、所有トランザクションを直接的に示してもよく、ログセグメント３６６内のログエントリ内に保存されたロックに関する他の情報は、当該ロックされたオブジェクトのアドレスによってインデックス化されたハッシュテーブル（hash table）内に保持されてもよい。
【００２４】
第２のトランザクションは、第１のトランザクション３６２のデータ構造３６４内の参照カウント（当該インクリメント後、２の値で示される）をインクリメントする。当該第１のトランザクションを実行しているスレッドは、このプロセスの間には停止されない。当該スレッドは、実行を継続して当該スレッドのトランザクションワーク（transactional work）３６２を完了し、それを示すデータ構造３６４の割り当てを解除する。このデータ構造は、再割り当てされて第３のトランザクションを示してもよい。参照カウントのインクリメントの目的は、割り当て解除を防止することであるが、当該インクリメントはこれらのステップの後に生起し得、当該データ構造が割り当てを解除されるかまたは他のトランザクションを示すこともある。従って、第２のトランザクション３６３は、当該参照カウントのインクリメントの後に、データ構造３６４が関心のあるトランザクションを示し続けているか確認する必要がある。第２のトランザクション３６３は、競合オブジェクト３６９内のロック情報を再度チェックし、競合オブジェクト３６９が同一のトランザクションデータ構造３６４に付随し続けているかを確認する。競合オブジェクト３６９が付随し続けていない場合、競合オブジェクト３６９のロック情報は、既に変更されている。従って、ロックプロセスが成功してから、最初からロックプロセスを再試行する。競合オブジェクト３６９が同一のトランザクションデータ構造３６４に付随し続けている場合、トランザクション３６３は、第１のトランザクション３６２のデータ構造３６４へのポインタ３６８を取得するので、データ構造３６４を安全に分析して競合オブジェクト３６９に関する競合管理判定を容易にすることが可能である。第２のトランザクション３６３が完了した場合、第２のトランザクション３６３は、第１のトランザクション３６２内のデータ構造３６４の参照カウントをデクリメントして、第２のトランザクション３６３が当該データ構造にはもう関心を有さないことを示す。特定のトランザクションデータ構造は、当該データ構造の参照カウントが、当該データ構造のデータに関心を有するトランザクションがもはや存在しないことを意味する０になるまで割り当てを解除され得ない。トランザクション３６２が以前に完了していた場合、トランザクション３６３によるデクリメントがトランザクションデータ構造３６４の参照カウントを０にし得る。この場合、トランザクション３６３は、当該データ構造の割り当てを解除しなければならない。
【００２５】
図９は、不安定属性を使用した専用の型固定アロケーションプールを減少させるステージの１つの実装例を示す。当該プロセスは、スタートポイント３７０で開始し、現在のスレッドに不安定ビットを設定する（ステージ３７２）。その後、競合しているトランザクションへのポインタが取得される（ステージ３７４）。１つの実装例において、スレッドの各々は、トランザクションデータ構造へのポインタの可能性のある取得の前に、不安定属性を設定しなければならない。競合管理判定が行われてコンフリクトが解消される（ステージ３７６）。競合管理判定が一度行われると、当該競合しているトランザクションへのポインタは、もはや使用されない（ステージ３７６）。従って、現在のスレッドにおいて不安定ビットが解除される（ステージ３７８）。１つの実装例において、全てのスレッドがガーベジコレクションで停止され、かついずれのスレッドもセットされた不安定属性を持たない場合、型固定アロケーションプール内のオブジェクトが割り当てを解除され得る。この割り当て解除は、削除されたメモリがオペレーティングシステムに返還され、再割り当てされて他の型を示し得るので型固定ではない。当該プロセスは、エンドポイント３８０で終了する。
【００２６】
図１０は、図９の実装例の代替例を示しており、型固定メモリへのポインタの位置のトラッキングによって専用の型固定アロケーションプールを減少させるステージを示している。当該プロセスは、スタートポイント４００で開始し、競合管理を実行しているスレッドを要求して、型固定メモリへのポインタの位置を宣言（declare）する（ステージ４０２）。当該システムは、型固定アロケーションプールにおいてガーベジコレクションのようなプロセスを実行し、使用されているエレメントを認識する（ステージ４０４）。当該システムは、残存する型固定アロケーションプールのいくつかの割り当てを選択的に解除する（ステージ４０６）。当該プロセスは、エンドポイント４０８で終了する。
【００２７】
本発明は、特に構造的特徴及び／または方法的動作に関して説明されてきたが、添付の特許請求の範囲によって画定された本発明は、上述の特定の特徴または動作に必ずしも限定されないと理解されるべきである。上述の特定の特徴及び動作は、特許請求の範囲記載発明の実施の例示の形態として開示されているだけである。本明細書及び／または添付の特許請求の範囲に記載されている実装例の精神内にある全ての均等物、変形例及び変更例は、保護されるべきものである。
【００２８】
例えば、コンピュータソフトウェア技術分野の当業者は、本明細書で説明された例が１または複数のコンピュータで組織されて、例示において示されたものより少ないもしくはさらに追加のオプションまたは特徴を含み得ることを理解するであろう。
【図１】
0005435741.tif 000002
【図２】
0005435741.tif 000003
【図３】
0005435741.tif 000004
【図４】
0005435741.tif 000005
【図５】
0005435741.tif 000006
【図６】
0005435741.tif 000007
【図７】
0005435741.tif 000008
【図８】
0005435741.tif 000009
【図９】
0005435741.tif 000010
【図１０】
0005435741.tif 000011