(57)【要約】  本開示は、ロックセマフォを介した共有資源の獲得及び解放に関し、より詳細には、状態マシンを利用した、ロックセマフォを介した共有資源の獲得及び解放に関する。
2007505374.tif 000002
【特許請求の範囲】
【請求項１】
スレッドによって利用されるロックを管理する方法であって、
前記ロックに対して実行する動作を選択することであって、該動作は、
前記ロックを獲得すること、
前記ロックを獲得しようと試行すること、及び
前記ロックを解放すること、
を含む一群から選択される、選択すること、
多値状態を有する、ロックの現在の状態を非同期に問い合わせること、
前記ロックの次の状態を投機的に決定すること、並びに
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
を含む、スレッドによって利用されるロックを管理する方法。
【請求項２】
前記状態遷移が失敗し、且つ、前記選択された動作が前記ロックを獲得すること又は解放することのいずれかであった場合、前記状態遷移が成功するまで、
前記ロックの現在の状態を非同期に問い合わせること、
前記ロックの次の状態を投機的に決定すること、及び
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
を繰り返すこと、をさらに含む、請求項１に記載の、スレッドによって利用されるロックを管理する方法。
【請求項３】
前記状態遷移が成功し、
前記選択された動作が前記ロックを獲得することであり、且つ、
前記投機的に決定された次の状態が前記ロックの前記獲得を表す
場合に、
前記ロックの前記獲得を示すこと、
をさらに含む、請求項２に記載の、スレッドによって利用されるロックを管理する方法。
【請求項４】
前記状態遷移が成功し、
前記選択された動作が前記ロックを獲得することであり、且つ、
前記投機的に決定された次の状態が前記ロックの前記獲得を表さない
場合に、
前記ロックを獲得するのを待っているスレッドのキューの最後に前記スレッドを追加すること、
前記スレッドが前記ロックを獲得できるという通知の受信を待つこと、及び
前記ロックの前記獲得を示すこと、
をさらに含む、請求項３に記載の、スレッドによって利用されるロックを管理する方法。
【請求項５】
前記状態遷移が成功し、且つ、
前記選択された動作が前記ロックを解放することである、
場合に、
前記ロックの前記投機的に決定された次の状態を利用して、前記ロックを獲得するキューにおけるスレッドの個数を求めること、
をさらに含む、請求項２に記載の、スレッドによって利用されるロックを管理する方法。
【請求項６】
前記キューが少なくとも最初のスレッドを含む場合に、
前記最初のスレッドを前記キューから除去すること、及び
前記最初のスレッドが前記ロックを獲得したことを前記最初のスレッドに通知すること、
をさらに含む、請求項５に記載の、スレッドによって利用されるロックを管理する方法。
【請求項７】
前記選択された動作が前記ロックを獲得しようと試行することであり、且つ、
前記状態遷移が失敗した、
場合に、
前記ロックを獲得できなかったことを示すこと、
をさらに含む、請求項１に記載の、スレッドによって利用されるロックを管理する方法。
【請求項８】
前記状態遷移が成功し、且つ、
前記選択された動作が前記ロックを獲得しようと試行することである、
場合に、
前記ロックの前記獲得を示すこと、
をさらに含む、請求項１に記載の、スレッドによって利用されるロックを管理する方法。
【請求項９】
前記状態遷移が成功し、
前記選択された動作が前記ロックを獲得することであり、且つ、
前記投機的に決定された次の状態が前記ロックの前記獲得を表す
場合に、
前記ロックの前記獲得を示すこと、
をさらに含む、請求項１に記載の、スレッドによって利用されるロックを管理する方法。
【請求項１０】
前記状態遷移が成功し、
前記選択された動作が前記ロックを獲得することであり、且つ、
前記投機的に決定された次の状態が前記ロックの前記獲得を表さない
場合に、
前記ロックを獲得するのを待っているスレッドのキューの最後に前記スレッドを追加すること、
前記スレッドが前記ロックを獲得できるという通知の受信を待つこと、及び
前記ロックの前記獲得を示すこと、
をさらに含む、請求項９に記載の、スレッドによって利用されるロックを管理する方法。
【請求項１１】
前記状態遷移が成功し、且つ、
前記選択された動作が前記ロックを解放することである、
場合に、
前記ロックの前記投機的に決定された次の状態を利用して、前記ロックを獲得するキューにおけるスレッドの個数を求めること、
をさらに含む、請求項１に記載の、スレッドによって利用されるロックを管理する方法。
【請求項１２】
前記キューが少なくとも最初のスレッドを含む場合に、
前記最初のスレッドを前記キューから除去すること、及び
前記最初のスレッドが前記ロックを獲得したことを前記最初のスレッドに通知すること、
をさらに含む、請求項１１に記載の、スレッドによって利用されるロックを管理する方法。
【請求項１３】
前記スレッドは、
一意のスレッド識別子と、
前記ロックを獲得するのを待っているスレッドのキューにおける次のスレッドへのアクセスを容易にする次スレッドフィールドと、
を含み、
前記スレッドは、一時に単一のロックを待つことしかできない、請求項１に記載の、スレッドによって利用されるロックを管理する方法。
【請求項１４】
前記ロックを獲得する前記動作は、タイムアウトできないこと又は前記ロックの獲得を失敗できないことを含む、請求項１に記載の、スレッドによって利用されるロックを管理する方法。
【請求項１５】
前記ロックの現在の状態は、
前記ロックの現在の状態を非同期に問い合わせること、及び
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
の間で変更することができる、請求項１に記載の、スレッドによって利用されるロックを管理する方法。
【請求項１６】
ロックであって、
フラグ値と、最初のスレッド値と、最後のスレッド値と、
を含む多状態値を有する、ロックと、
ロック獲得者であって、
前記ロックの現在の状態を非同期に問い合わせること、
前記ロックの次の状態を投機的に決定すること、及び
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
を介して前記ロックの獲得を実行することができる、ロック獲得者と、
を備える装置。
【請求項１７】
前記ロック獲得者は、さらに、前記ロックを獲得すること、前記ロックを獲得しようと試行することを含めて、２つの一般的な動作を実行することができ、
前記状態遷移が失敗し、且つ、前記一般的な動作が前記ロックを獲得することである場合に、前記ロック獲得者は、さらに、前記状態遷移が成功するまで、
前記ロックの現在の状態を非同期に問い合わせること、
前記ロックの次の状態を投機的に決定すること、及び
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
を繰り返すことができる、請求項１６に記載の装置。
【請求項１８】
前記状態遷移が失敗し、且つ、前記一般的な動作が前記ロックを獲得しようと試行することである場合に、前記ロック獲得者は、さらに、
前記ロックを獲得できなかったことを示すこと、
ができる、請求項１７に記載の装置。
【請求項１９】
前記状態遷移が成功し、且つ、前記一般的な動作が前記ロックを獲得しようと試行することである場合に、前記ロック獲得者は、さらに、
前記ロックを獲得したことを示すこと、
ができる、請求項１８に記載の装置。
【請求項２０】
前記状態遷移が成功し、
前記一般的な動作が前記ロックを獲得することであり、且つ、
前記投機的に決定された次の状態が前記ロックの前記獲得を表す場合に、前記ロック獲得者は、さらに、
前記ロックを獲得したことを示すこと、
ができる、請求項１６に記載の装置。
【請求項２１】
前記状態遷移が失敗し、
前記一般的な動作が前記ロックを獲得することであり、且つ、
前記投機的に決定された次の状態が前記ロックの前記獲得を表さない
場合に、
前記ロック獲得者は、さらに、
前記ロックを獲得するのを待っているスレッドのキューの最後に前記スレッドを追加すること、
前記スレッドが前記ロックを獲得できるという通知の受信を待つこと、及び
前記ロックの前記獲得を示すこと、
ができる、請求項２０に記載の装置。
【請求項２２】
前記選択された一般的な動作が前記ロックを獲得することである場合に、前記ロック獲得者は、失敗のタイムアウトができない、請求項２１に記載の装置。
【請求項２３】
ロックであって、
フラグ値と、最初のスレッド値と、最後のスレッド値と、
を含む多状態値を有する、ロックと、
ロック解放者であって、
前記ロックの現在の状態を非同期に問い合わせること、
前記ロックの次の状態を投機的に決定すること、及び
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
を介して前記ロックの保持の解放を実行することができる、ロック解放者と、
を備える装置。
【請求項２４】
前記状態遷移が失敗した場合に、前記ロック解放者は、さらに、前記状態遷移が成功するまで、
前記ロックの現在の状態を非同期に問い合わせること、
前記ロックの次の状態を投機的に決定すること、及び
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
を繰り返すことができる、請求項２３に記載の装置。
【請求項２５】
前記状態遷移が成功した場合に、前記ロック解放者は、さらに、前記ロックの前記投機的に決定された次の状態を利用して、前記ロックを獲得するのを待っているスレッドのキューにおけるスレッドの個数を求めることができる、請求項２３に記載の装置。
【請求項２６】
前記キューが少なくとも最初のスレッドを含む場合に、前記ロック解放者は、さらに、
前記最初のスレッドを前記キューから除去すること、及び
前記最初のスレッドが前記ロックを獲得したことを前記最初のスレッドに通知することと、
ができる、請求項２５に記載の装置。
【請求項２７】
前記ロック解放者は、
一意のスレッド識別子と、
前記キューにおける次のスレッドへのアクセスを容易にする次スレッド値と、
を有するスレッドを利用して、前記最初のスレッドを前記キューから除去することができる、請求項２６に記載の装置。
【請求項２８】
前記ロックは、前記ロック解放者が、
前記ロックの現在の状態を非同期に問い合わせる時と、
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みる時と、
の間で、状態を変更することができる、請求項２３に記載の装置。
【請求項２９】
複数のマシンアクセス可能命令を有する記憶媒体であって、該命令は、実行されるときに、
スレッドによって利用されるロックに対して実行する動作を選択することであって、該動作は、
前記ロックを獲得すること、
前記ロックを獲得しようと試行すること、及び
前記ロックを解放すること、
を含む一群から選択される、選択すること、
多値状態を有する、ロックの現在の状態を非同期に問い合わせること、
前記ロックの次の状態を投機的に決定すること、並びに
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
を提供する、記憶媒体
を含む、物品。
【請求項３０】
前記状態遷移が失敗し、且つ、前記選択された動作が前記ロックを獲得すること又は解放することのいずれかである場合に、前記状態遷移が成功するまで、
前記ロックの現在の状態を非同期に問い合わせること、
前記ロックの次の状態を投機的に決定すること、及び
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
を繰り返すことを提供する命令をさらに含む、請求項２９に記載の物品。
【請求項３１】
前記状態遷移が成功し、
前記選択された動作が前記ロックを獲得することであり、且つ、
前記投機的に決定された次の状態が前記ロックの前記獲得を表す
場合に、
前記ロックの前記獲得を示すこと、
を提供する命令をさらに含む、請求項３０に記載の物品。
【請求項３２】
前記状態遷移が成功し、
前記選択された動作が前記ロックを獲得することであり、且つ、
前記投機的に決定された次の状態が前記ロックの前記獲得を表さない、
場合に、
前記ロックを獲得するのを待っているスレッドのキューの最後に前記スレッドを追加すること、
前記スレッドが前記ロックを獲得できるという通知の受信を待つこと、及び
前記ロックの前記獲得を示すこと、
を提供する命令をさらに含む、請求項３１に記載の物品。
【請求項３３】
前記状態遷移が成功し、且つ、
前記選択された動作が前記ロックを解放することである、
場合に、
前記ロックの前記投機的に決定された次の状態を利用して、前記ロックを獲得するキューにおけるスレッドの個数を求めること、
を提供する命令をさらに含む、請求項３０に記載の物品。
【請求項３４】
前記キューが少なくとも最初のスレッドを含む場合に、
前記最初のスレッドを前記キューから除去すること、及び
前記最初のスレッドが前記ロックを獲得したことを前記最初のスレッドに通知すること、
を提供する命令をさらに含む、請求項３３に記載の物品。
【請求項３５】
前記選択された動作が前記ロックを獲得しようと試行することであり、且つ、
前記状態遷移が失敗した、
場合に、
前記ロックを獲得できなかったことを示すこと、
を提供する命令をさらに含む、請求項２９に記載の物品。
【請求項３６】
前記状態遷移が成功し、且つ、
前記選択された動作が前記ロックを獲得しようと試行することである、
場合に、
前記ロックの前記獲得を示すこと、
を提供する命令をさらに含む、請求項２９に記載の物品。
【請求項３７】
前記状態遷移が成功し、
前記選択された動作が前記ロックを獲得することであり、且つ、
前記投機的に決定された次の状態が前記ロックの前記獲得を表す
場合に、
前記ロックの前記獲得を示すこと、
を提供する命令をさらに含む、請求項２９に記載の物品。
【請求項３８】
前記状態遷移が成功し、
前記選択された動作が前記ロックを獲得することであり、且つ、
前記投機的に決定された次の状態が前記ロックの前記獲得を表さない、
場合に、
前記ロックを獲得するのを待っているスレッドのキューの最後に前記スレッドを追加すること、
前記スレッドが前記ロックを獲得できるという通知の受信を待つこと、及び
前記ロックの前記獲得を示すこと、
を提供する命令をさらに含む、請求項３７に記載の物品。
【請求項３９】
前記状態遷移が成功し、且つ、
前記選択された動作が前記ロックを解放することである、
場合に、
前記ロックの前記投機的に決定された次の状態を利用して、前記ロックを獲得するキューにおけるスレッドの個数を求めること、
を提供する命令をさらに含む、請求項２９に記載の物品。
【請求項４０】
前記キューが少なくとも最初のスレッドを含む場合に、
前記最初のスレッドを前記キューから除去すること、及び
前記最初のスレッドが前記ロックを獲得したことを前記最初のスレッドに通知すること、
を提供する命令をさらに含む、請求項３９に記載の物品。
【請求項４１】
前記スレッドは、
一意のスレッド識別子と、
前記ロックを獲得するのを待っているスレッドのキューにおける次のスレッドへのアクセスを容易にする次スレッドフィールドと、
を含み、
前記スレッドは、一時に単一のロックを待つことしかできない、
請求項２９に記載の物品。
【請求項４２】
前記ロックを獲得する前記動作は、タイムアウトできないこと又は前記ロックの獲得を失敗できないことを含む、請求項２９に記載の物品。
【請求項４３】
前記ロックの現在の状態は、
前記ロックの現在の状態を非同期に問い合わせること、及び
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
の間で変更することができる、請求項２９に記載の物品。
【請求項４４】
スレッドのキューを記憶することができるメモリ素子であって、各スレッドは、
一意のスレッド識別子と、前記キューにおける次のスレッドへのアクセスを容易にする次スレッド値と、
を含む、メモリ素子と、
ロックであって、
フラグ値と、最初のスレッド値と、最後のスレッド値と、
を含む多状態値を有する、ロックと、
ロック獲得者であって、
前記ロックの現在の状態を非同期に問い合わせること、
前記ロックの次の状態を投機的に決定すること、及び
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
を介して前記ロックの獲得を実行することができる、ロック獲得者と、
を備えるシステム。
【請求項４５】
前記ロック獲得者は、さらに、前記ロックを獲得すること、前記ロックを獲得しようと試行することを含めて、２つの一般的な動作を実行することができ、
前記状態遷移が失敗し、且つ、前記一般的な動作が前記ロックを獲得することである場合に、前記ロック獲得者は、さらに、前記状態遷移が成功するまで、
前記ロックの現在の状態を非同期に問い合わせること、
前記ロックの次の状態を投機的に決定すること、及び
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
を繰り返すことができる、請求項４４に記載のシステム。
【請求項４６】
前記状態遷移が失敗し、且つ、前記一般的な動作が前記ロックを獲得しようと試行することである場合に、前記ロック獲得者は、さらに、
前記ロックを獲得できなかったことを示すこと、
ができる、請求項４５に記載のシステム。
【請求項４７】
前記状態遷移が成功し、且つ、前記一般的な動作が前記ロックを獲得しようと試行することである場合に、前記ロック獲得者は、さらに、
前記ロックを獲得したことを示すこと、
ができる、請求項４６に記載のシステム。
【請求項４８】
前記状態遷移が成功し、
前記一般的な動作が前記ロックを獲得することであり、且つ、
前記投機的に決定された次の状態が前記ロックの前記獲得を表す
場合に、前記ロック獲得者は、さらに、
前記ロックを獲得したことを示すこと、
ができる、請求項４４に記載のシステム。
【請求項４９】
前記状態遷移が失敗し、
前記一般的な動作が前記ロックを獲得することであり、且つ、
前記投機的に決定された次の状態が前記ロックの前記獲得を表さない
場合に、前記ロック獲得者は、さらに、
前記ロックを獲得するのを待っているスレッドのキューの最後に前記スレッドを追加すること、
前記スレッドが前記ロックを獲得できるという通知の受信を待つこと、及び
前記ロックの前記獲得を示すこと、
ができる、請求項４８に記載のシステム。
【請求項５０】
前記選択された一般的な動作が前記ロックを獲得することである場合に、前記ロック獲得者は、失敗のタイムアウトができない、請求項４９に記載のシステム。
【請求項５１】
スレッドのキューを記憶することができるメモリ素子であって、各スレッドは、
一意のスレッド識別子と、前記キューにおける次のスレッドへのアクセスを容易にする次スレッド値と、
を含む、メモリ素子と、
ロックであって、
フラグ値と、最初のスレッド値と、最後のスレッド値と、
を含む多状態値を有する、ロックと、
ロック解放者であって、
前記ロックの現在の状態を非同期に問い合わせること、
前記ロックの次の状態を投機的に決定すること、及び
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
を介して前記ロックの保持を解放することができる、ロック解放者と、
を備えるシステム。
【請求項５２】
前記状態遷移が失敗した場合、前記ロック解放者は、さらに、前記状態遷移が成功するまで、
前記ロックの現在の状態を非同期に問い合わせること、
前記ロックの次の状態を投機的に決定すること、及び
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みること、
を繰り返すことができる、請求項５１に記載のシステム。
【請求項５３】
前記状態遷移が成功した場合に、前記ロック解放者は、さらに、前記ロックの前記投機的に決定された次の状態を利用して、前記ロックを獲得するのを待っているスレッドのキューにおけるスレッドの個数を求めることができる、請求項５１に記載のシステム。
【請求項５４】
前記キューが少なくとも最初のスレッドを含む場合に、前記ロック解放者は、さらに、
前記最初のスレッドを前記キューから除去すること、及び
前記最初のスレッドが前記ロックを獲得したことを前記最初のスレッドに通知すること、
ができる、請求項５３に記載のシステム。
【請求項５５】
前記ロックは、前記ロック解放者が、
前記ロックの現在の状態を非同期に問い合わせる時と、
前記問い合わせられた現在の状態から前記投機的に決定された次の状態へ前記ロックを遷移させようと試みる時と、
の間で、状態を変更することができる、請求項５１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ロックセマフォを介した共有資源の獲得及び解放に関し、より詳細には、状態マシンを利用した、ロックセマフォを介した共有資源の獲得及び解放に関する。
【背景技術】
【０００２】
通常、処理システム又はコンピュータシステムは、複数のプログラムを実質的に同時に実行することを可能にする。複数のプログラムは、たとえば、タイムスライシングエンジン、並列実行エンジン、又はマルチプロセシングエンジン等の技法を利用して実質的に同時に実行することができる。さらに、プログラムの複数の部分、すなわちスレッドを、ほとんど同じ方法で実質的に同時に実行することも可能である。この実質的な同時実行を可能にする技法は、多くの場合、マルチタスク、マルチスレッド、又はハイパースレッドを行っていると呼ばれる。マルチタスク技法の一例によって、音楽プレイヤ及びワードプロセッサを実質的に同時に実行することを可能にすることができ、したがって、ユーザは、音楽を聴きながら、文書を書くことができる。マルチスレッド技法の一例は、文書を編集しながら、同時に同じ文書を印刷することを可能にしたワードプロセッサとすることができる。
【０００３】
これらのスレッド、プロセス、又はプログラムを、以下、「スレッド」と総称する。これらのスレッドは、多くの場合、共有資源にアクセスする。これらの共有資源には、物理的なハードウェア、又は、たとえば共通ライブラリ等の実行可能命令の他のセクションが含まれ得る。これらの共有資源は、複数のスレッドが実質的に同時に利用できない場合がある。たとえば、プリンタが２つ又はそれ以上の文書を同時に印刷することは一般的ではない。しかしながら、マルチスレッド化された環境では、２つ又はそれ以上のスレッドが、プリンタへ同時に印刷しようと試みる場合がある。もちろん、これは、複数のスレッドが実質的に同時に利用できない場合がある共有資源の一例にすぎない。
【０００４】
複数のスレッドが共有資源を同時に使用しようと試みる時に発生するおそれのあるエラー又は他の望ましくない影響を防止するために、さまざまな技法が知られている。１つの技法では、共有資源へのスレッドのアクセスをセマフォロックによって統制することができる。セマフォロックを、以下「ロック」と呼ぶ。この状況では、ロックは、共有システム資源へのアクセスを統制するのに使用される信号変数又はフラグ変数となる。ロックは、多くの場合、ファイル又は他の資源が使用中であることを他の潜在的なユーザ又はスレッドに示し、２人以上のユーザ又は２つ以上のスレッドによるアクセスを防止する。
【０００５】
上記プリンタの例では、第１のスレッドが、プリンタのロックを獲得して、文書を印刷し、プリンタのロックを解放することができる。第２のスレッドは、プリンタのロックを獲得しようと試みることができる。第２のスレッドは、プリンタが第１のスレッドによってすでにロックされていることを検出すると、多くの場合、ロックを獲得するのを待つ。第１のスレッドがプリンタのロックを解放すると、第２のスレッドは、その後、プリンタのロックを獲得し、第２の文書を印刷し、プリンタのロックを解放することができる。この例では、プリンタへのアクセスの競合が統制されている。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
多くの場合、単一スレッドが所与の時刻において複数のロックを保持することが可能である。従来の技法を使用すると、或るスレッドが同時に複数のロックを保持する場合、関連した動的メモリ割り当て及び割り当て解除が、多くの場合、ロックの個数、スレッドの個数、及びロック獲得の個数の合計に比例する。現代のシステムでは、この結果の個数は、多くの場合、かなり大きくなる。これに加えて、メモリ割り当て及び割り当て解除が頻繁であることによって、大量の処理時間及び他のシステム資源が消費されるおそれがある。したがって、ロックセマフォを介した共有資源の獲得及び解放を実施するための改良されたシステム又は技法が必要とされている。
【課題を解決するための手段】
【０００７】
主題は、本明細書の結論部分で詳しく指摘されており、明瞭に主張されている。しかしながら、オペレーションの編成及びオペレーションの方法の双方に関する開示した主題は、その目的、特徴、及び利点と共に、以下の詳細な説明を参照して、添付図面と共に読んだ時に最も良く理解することができる。
【発明を実施するための最良の形態】
【０００８】
以下の詳細な説明では、開示した本主題の十分な理解を提供するために、多数の細部が述べられている。しかしながら、開示した主題は、これらの具体的な細部がなくても実施できることが当業者には理解されよう。それ以外の場合には、既知の方法、手続き、コンポーネント、及び回路は、開示した主題を分かりにくくしないよう詳細には説明されていない。
【０００９】
図１は、開示した主題によるロックの獲得及び／又は解放を行うための技法の一実施の形態を示すフローチャートである。ブロック１１０は、要求スレッド又はそのスレッドに関連付けられたエージェントが、ロックに対して実行する動作を選択できることを示している。１つの実施の形態では、この動作は、ロックの獲得、ロックの獲得の試行、又はロックの解放を含む一群の動作から選択することができる。
【００１０】
ブロック１２０は、ロックの現在の状態を非同期に問い合わせることができることを示している。１つの実施の形態では、ロックは、たとえば、図３に示す状態マシン等の、４つの有効な状態を有する状態マシンを利用することができる。
【００１１】
図３は、開示した主題によるロックの獲得及び／又は解放を行うための技法によって利用される状態マシンの一実施の形態を示す状態図である。この状態マシンの１つの実施の形態は、４つの有効な状態を含むことができる。また、この実施の形態は、フラグ値、ロックの獲得を待っているスレッドのキューにおける最初のスレッドへのポインタ、及びロックを獲得するキューにおける最後のスレッドへのポインタを含むロックを伴うこともできる。１つの実施の形態では、フラグ値は、ロックが保持されているかどうか、及び、ロックの獲得を待っているスレッドのキューがあるかどうかの双方を示すことができる。他の実施の形態では、このフラグ値は、ロックが保持されているかどうかのみを示すことができ、もう１つの値が、キューが存在するかどうかを示すことができる。また、キューの存在は、最初のスレッドポインタ及び最後のスレッドポインタによって決定できることも考慮される。さらに、スレッドへの「ポインタ」は、アドレス値、一意のスレッド識別子、又は、スレッドへのアクセスを容易にする他の或る値とすることができることも考慮される。図３及び図４によって示される実施の形態では、ロックの状態は、フラグ値及びスレッドポインタによって決定することができる。しかしながら、ロックの状態を決定するための他の技法も考慮される。
【００１２】
状態３１０は、ロックを保持するスレッドがなく、且つ、ロックを獲得するキューで待っているスレッドがないことを示すことができる。図示した実施の形態では、フラグ値、最初のスレッドポインタ、及び最後のスレッドポインタをすべてゼロに設定することができる。しかしながら、他の実施の形態では、他の値を使用してこの獲得されない状態を表すことができることも考慮される。この実施の形態では、状態３１０は、ロックの初期状態とすることができる。また、この実施の形態では、ロックは、保持されていないので、解放することができない。１つの実施の形態では、ロックを解放しようとする試みはエラーに終わるものとすることができる。さらに、この実施の形態では、ロックは、（獲得動作又は試行動作のいずれかを介して）獲得のみ行うことができる。ロックを獲得する動作によって、ロックは状態３２０へ移動することができる。しかしながら、他の実施の形態も考慮される。
【００１３】
状態３２０は、或るスレッドがロックを保持し、且つ、キューで待っているスレッドがないことを示すことができる。図示した実施の形態では、フラグ値を１に設定することができ、最初のスレッドポインタ及び最後のスレッドポインタを０に設定することができる。しかしながら、他の実施の形態では、他の値を使用してこの獲得された状態を表すことができることも考慮される。この実施の形態では、ロックが解放された場合、ロックは状態３１０へ戻ることができる。また、この実施の形態では、ロックが獲得された場合、ロックは状態３３０へ移動することができる。しかしながら、他の実施の形態も考慮される。
【００１４】
状態３３０は、或るスレッドがロックを保持し、且つ、１つのスレッドがキューで待っていることを示すことができる。図示した実施の形態では、フラグ値を２に設定することができ、最初のスレッドポインタ及び最後のスレッドポインタは、同じスレッドを指し示すことができる。このスレッドは、図３及び図４では「Ｈ」として表されている。この「Ｈ」は、キューの先頭のスレッドの略語である。しかしながら、他の実施の形態では、他の値を使用してこの状態を表すことができることも考慮される。この実施の形態では、ロックが解放された場合、ロックは状態３２０へ戻ることができる。また、この実施の形態では、ロックが獲得された場合、ロックは状態３４０へ移動することができる。しかしながら、他の実施の形態も考慮される。
【００１５】
状態３４０は、或るスレッドがロックを保持し、且つ、２つ以上のスレッドがキューで待っていることを示すことができる。図示した実施の形態では、フラグ値を２に設定することができ、最初のスレッドポインタ及び最後のスレッドポインタは、異なるスレッドを指し示すことができる。最後のスレッドは、図３及び図４では「Ｔ」として表されている。この「Ｔ」は、キューの末尾のスレッドの略語である。しかしながら、他の実施の形態では、他の値を使用してこの状態を表すことができることも考慮される。この実施の形態では、ロックが解放された場合、ロックを解放することによってキューの長さが１に変更されるかどうかに応じて、ロックは、状態３３０へ戻ることもできるし、状態３４０に留まることもできる。また、この実施の形態では、ロックが獲得された場合、ロックは状態３４０に留まることができる。解放動作又は獲得動作の後、ロックが状態３４０に留まる場合、その実行された動作を表すために最初のスレッドポインタ又は最後のスレッドポインタのいずれかを変更できることも考慮される。しかしながら、他の実施の形態も考慮される。
【００１６】
図４は、開示した主題によるロックの獲得及び／又は解放を行うための技法の一実施の形態において利用される状態マシンの可能な状態を詳述する表である。この表は、図３に示す状態マシンの要約を提供する。行４１０は状態３１０を要約している。行４２０は状態３２０を要約している。行４３０は状態３３０を要約している。行４４０は状態３４０を要約している。しかしながら、図３及び図４は、開示した主題の１つの実施の形態を示しているにすぎず、他の実施の形態も考慮される。
【００１７】
図１に戻って、ブロック１３０は、ロックの現在の状態がブロック１２０において一旦決定されると、ロックの次の状態を投機的に決定できることを示している。１つの例示では、スレッドは、ロックの獲得を要求することができる。ロックの現在の状態は、ロックが現在保持されていないことを示すことができる。したがって、図３によって示された状態マシンの実施の形態を利用すると、要求された「獲得」動作が実行された後のロックの次の状態は、ロックが保持されているが、ロックの獲得を待っているキューにはスレッドがないことを表す状態であると投機的に決定することができる。
【００１８】
ブロック１４０は、ロックを次の状態へ遷移させる試みを行うことができることを示している。ロックの状態のこの変更及びおそらくあらゆる変更は、競合状態の発生及び他の望ましくないスレッドに関係した影響の発生を最小にしようと試みる技法を介して行うことができることも考慮される。競合状態は、多くの場合、デバイス又はシステムが２つ又はそれ以上のオペレーションを実質的に同時に実行しようと試みる時に発生する望ましくない状況として定義されるが、デバイス又はシステムの性質のため、それらのオペレーションは、正しく行うためには適切な順序で行わなければならない。１つの実施の形態では、この変更は、変数を新しい値に設定することを許可する前に、その変数が予測された値と等しいことを確認する「比較アンド記憶（compare-and-store）」オペレーション（別名「テストアンド設定（test-and-set）」オペレーション）によって実行することができる。しかしながら、これらは、開示した主題を限定するものではない２、３の非限定的な例にすぎない。
【００１９】
ブロック１５０は、いくつかの実施の形態において、状態遷移が成功しない場合があることを示している。１つの実施の形態では、ロックの状態は、ブロック１２０とブロック１４０との間で変化できることが考慮される。また、この技法のスレッド又は実行者が、遷移が試みられる前に、状態のこの変化に気付かない場合があることも考慮される。１つの例示では、第２のスレッドが、ブロック１２０とブロック１４０との間でロックの状態を変更する場合がある。これは、試みられた状態遷移を失敗させる場合がある。たとえば、このような変化が発生した場合に、遷移が失敗する場合があることが考慮される。しかしながら、他の可能な失敗も考慮される。
【００２０】
ブロック１６０は、ブロック１４０の状態遷移が失敗した場合に、選択された動作を調べることができることを示している。ブロック１１０の選択された動作又は要求された動作は、１つの実施の形態では、ロックを獲得しようと試行すること、ロックを獲得すること、又はロックを解放することとすることができる。しかしながら、他の動作も、開示した主題の範囲内にある。
【００２１】
ブロック１７０は、１つの実施の形態では、選択された動作が単にロックを獲得しようと試行することであり、且つ、状態遷移が失敗した場合に、この技法が、ロックが獲得されなかったことを要求スレッドに示すことができることを示している。逆に、１つの実施の形態では、選択された動作が「獲得」又は「解放」であった場合に、図１は、ロックが状態遷移に成功するまで、この技法が、ブロック１２０、１３０、及び１４０を繰り返すことができることを示している。
【００２２】
図２は、開示した主題によるロックの獲得及び／又は解放を行うための技法の一実施の形態を示すフローチャートである。図２は、図１を拡張したものであり、図１のブロック１４０の状態遷移が成功した場合に使用できる技法の一実施の形態を詳述する。
【００２３】
図２のブロック２１０は、選択された動作（図１のブロック１１０参照）に応じて、異なるイベントが起こり得ることを示している。選択された動作が「獲得」又は「試行」であった場合、ブロック２２０は、ロックが獲得されたかどうかに基づいて異なる動作を実行できることを示している。例示の１つの実施の形態では、ロックを獲得することは、図３の状態３１０にロックを遷移させることと同義とすることができる。しかしながら、これは、例示の１つの実施の形態にすぎず、他の実施の形態も考慮される。
【００２４】
ブロック２３０は、ロックが獲得された場合に、ロックが獲得されたことをスレッドに表示できることを示している。１つの実施の形態では、この表示は、スレッドの回転フラグ（spin flag）を選択解除すること（又は「偽」状態に設定すること）を含むことができる。この回転フラグは、スレッドがロックの獲得を待ち続けていた間、スレッドの実行を防止している場合がある。しかしながら、他の形式の表示も可能であり、これは、１つの例示にすぎないことが考慮される。また、開示した主題の一定の実施の形態においてのみこの表示を行えることも考慮される。
【００２５】
ブロック２５０は、ロックが獲得されず、且つ、選択された動作が「獲得」であった場合に、ロックを要求したスレッドを、ロックの獲得を待っているスレッドのキューに追加できることを示している。１つの実施の形態では、このスレッドを、単純にキューの最後又は末尾に追加することができる。しかしながら、他の方式を使用して、ロックへのアクセスに優先順位を付けることができることも考慮される。
【００２６】
例示の１つの実施の形態では、追加されたスレッドは、キューにおける最初の唯一のスレッドとすることができる。たとえば、ロックを図３の状態３２０から状態３３０へ遷移させることができる。この場合、スレッドをキューに追加することは、ロックのフラグ値を２に設定すること、及び、スレッドへのポインタ（又は、アクセスを容易にする他の或る値）を、ロックの最初のスレッドポインタ値及び最後のスレッドポインタ値にすることを含むことができる。しかしながら、これは、開示した主題の非常に特異的な１つの実施の形態にすぎず、他の実施の形態も考慮される。
【００２７】
第２の例示の実施の形態では、追加されたスレッドは、キューの２番目のスレッドとすることができる。たとえば、ロックを状態３３０から状態３４０へ遷移させることができる。この場合、スレッドをキューに追加することは、ロックのフラグ値も最初のスレッドポインタも変更しないこと、及び、スレッドへのポインタ（又は、アクセスを容易にする他の或る値）を、ロックの最後のスレッドポインタ値にすることを含むことができる。しかしながら、これは、開示した主題の非常に特異的な１つの実施の形態にすぎず、他の実施の形態も考慮される。
【００２８】
第３の例示の実施の形態では、追加されたスレッドは、キューの３番目以降のスレッドとすることができる。たとえば、ロックを前の状態３４０から新たな状態３４０へ遷移させることができる。この場合、キューにスレッドを追加することは、ロックのフラグ値も最初のスレッドポインタも変更しないこと、及び、スレッドへのポインタ（又は、アクセスを容易にする他の或る値）を、ロックの最後のスレッドポインタ値にすることを含むことができる。この新たな最後の（又は、末尾の）スレッドポインタは、前の最後のスレッドポインタに取って代わる。しかしながら、これは、開示した主題の非常に特異的な１つの実施の形態にすぎず、他の実施の形態も考慮される。
【００２９】
図２のブロック２５５は、現在キューに入れられているスレッドが、ロックが獲得されたことの通知の受信を待つことができることを示している。１つの実施の形態では、スレッドは、ロックが獲得可能であることの通知を待つことができることが考慮される。１つの実施の形態では、このスレッドは、待っている間実行されることを防止することができる。別の実施の形態では、スレッドは、ロックによって制御される資源へのアクセスの必要も要求もないスレッドの一部を実行し続けることができる。
【００３０】
ブロック２６０は、選択された動作がロックを解放することであった場合に、ロックの獲得を待っているスレッドのキューにおけるスレッドの個数、又は、別の実施の形態では当該キューの存在を求めることができることを示している。１つの実施の形態では、ロックに関連付けられたフラグ値によって、キューの近似的なサイズを求めることができる。別の実施の形態では、キューに入れられた最初のスレッドポインタと最後のスレッドポインタとを比較することによって、キューの存在又は深度を求めることができる。しかしながら、これらは、２つの例示にすぎず、キューの存在又は深度を求めるための他の方式を使用できることも考慮される。
【００３１】
ブロック２７０は、キューが存在しない場合に、ロックを解放できることを示している。図３によって示された１つの実施の形態では、これは、ロックを状態３２０から状態３１０へ遷移させることを伴うことができる。この実施の形態では、図２のブロック２７０は、図１のブロック１４０と同義とすることができる。しかしながら、他の実施の形態は、たとえば、あらかじめ定義された戻り値や集中ステータスメカニズム等のより大きく関与する解放メカニズムを含むことができることも考慮される。これらは、２、３の非限定的な実施の形態にすぎない。
【００３２】
図２のブロック２８０は、キューが存在する場合に、キューの最初のスレッドを特定できるか、又は、当該スレッドにアクセスできることを示している。１つの実施の形態では、これは、ロックの最初のスレッドポインタ値に関連付けられたポインタ値を利用することを伴うことができる。しかしながら、これは、例示の１つの実施の形態にすぎず、他の実施の形態も考慮される。
【００３３】
ブロック２８３は、最初のスレッドをキューから除去できることを示している。１つの実施の形態では、これは、ロックの状態及びキューから取り出されたスレッドの双方を編集することを含むことができる。しかしながら、スレッドをキューから取り出すための他の方式も考慮される。３つの非常に特異的な実施の形態を以下に説明する。しかしながら、これらは、２、３の非限定的な例にすぎない。
【００３４】
例示の１つの実施の形態では、キューから取り出されたスレッドは、キューにおける最初の唯一のスレッドとすることができる。たとえば、ロックを図３の状態３３０から状態３２０へ遷移させることができる。この場合、キューからスレッドを除去することは、ロックのフラグ値を１に設定することと、最初のスレッドポインタ値及び最後のスレッドポインタ値を０に設定することとを含むことができる。しかしながら、これは、開示した主題の非常に特異的な１つの実施の形態にすぎず、他の実施の形態も考慮される。
【００３５】
第２の例示の実施の形態では、キューは、２つのスレッドのみを含むことができる。たとえば、ロックを状態３４０から状態３３０へ遷移させることができる。この場合、キューからスレッドを除去することは、フラグ値もロックの最後のスレッドポインタも変更しないことを含むことができる一方、キューに入れられた第２のスレッドへのポインタ（又は、アクセスを容易にする他の或る値）を、ロックの最初のスレッドポインタ値にすることを含むことができる。１つの実施の形態では、最初のスレッドは、キューにおける次のスレッドへのポインタを含む「次スレッド」値を含むことができる。この次スレッド値にアクセスして、ロックにおける新たな最初のスレッドポインタを設定するのに適した値を決定することができる。しかしながら、これは、開示した主題の非常に特異的な１つの実施の形態にすぎず、他の実施の形態も考慮される。
【００３６】
第３の例示の実施の形態では、キューは、３つ以上のスレッドを含むことができる。たとえば、ロックを前の状態３４０から新たな状態３４０へ遷移させることができる。この実施の形態では、動作は、第２の例示の実施の形態と同一とすることができる。最初のスレッドポインタ及び最後のスレッドポインタが最終的に状態３３０で同じ値を含む第２の実施の形態と異なり、この実施の形態は、最初のスレッドポインタ及び最後のスレッドポインタが状態３４０で異なる値を含むことになる。しかしながら、これは、開示した主題の非常に特異的な１つの実施の形態にすぎず、他の実施の形態も考慮される。
【００３７】
図２のブロック２８６は、キューから取り出されたスレッドがロックを獲得したことを当該スレッドに通知できることを示している。１つの実施の形態では、この表示は、スレッドの回転フラグを選択解除すること（又は「偽」状態に設定すること）を含むことができる。この回転フラグは、スレッドがロックの獲得を待ち続けていた間、スレッドの実行を防止している場合がある。しかしながら、他の形式の表示も可能であり、これは、１つの例示にすぎないことが考慮される。また、開示した主題の一定の実施の形態においてのみこの表示を行えることも考慮される。
【００３８】
また、１つの実施の形態では、図２に示す動作の全部ではないが一部を図１のブロック１４０及び１５０の一部として含めることができることも考慮される。この実施の形態では、ブロック１４０及び１５０は、たとえば、新しい値に設定される変数を変更する前に、その変数が予測された値と等しいことを確認する「比較アンド記憶」オペレーション（別名「テストアンド設定」オペレーション）等の原子動作として実施することができる。
【００３９】
図５は、開示した主題によるロック５１０の獲得及び解放を可能にする装置５０１及びシステム５００の一実施の形態を示すブロック図である。１つの実施の形態では、ロック５１０は、状態値５２０を含むことができる。この状態値は、ロックが現在保持されているかどうか及び／若しくはロックの獲得を待っているスレッドのキュー５５０の近似的な長さを示すフラグ値５２３、最初のスレッド５６０へのアクセスを容易にする最初のスレッド値５２５、並びに／又は、最後のスレッド５８０へのアクセスを容易にする最後のスレッド値５２８を含むことができる。
【００４０】
１つの実施の形態では、システム５００は、ロック５１０の獲得を待っているスレッドのキュー５５０を含むことができる。図５は、少なくとも４つのスレッドを有するキューを示しているが、０個のスレッド又は１つ以上のスレッドを有するキューは、開示した主題の範囲内にある。キューは、最初のスレッド５６０、最後のスレッド５８０、２番目のスレッド５７０、及び複数の他のスレッド５９０を含むことができる。１つの実施の形態では、たとえば、キューが１つのスレッドしか含まない場合、最初のスレッド及び最後のスレッドは同一とすることができる。１つの実施の形態では、キューの各スレッドは、そのスレッドがロックの獲得を待っていることを示す待機値５９３、及び／又は、キューにおける次のスレッドへのアクセスを容易にする次スレッド値５９７を含むことができる。しかしながら、他の状態及びメモリ構造がスレッドによって利用可能であることも考慮される。
【００４１】
１つの実施の形態では、装置５０１及びシステム５００は、ロック５１０の獲得を容易にするロック獲得者５３０を含むことができる。１つの実施の形態では、ロック獲得者は、図１及び図２により示して上述した技法の全部又は一部を実行できるものとすることができる。別の例では、ロック獲得者は、ロックが保持されているかどうかを判断できるものとすることができる。ロックが保持されている場合、ロック獲得者は、要求スレッドをキュー５５０内に置くことができる。要求スレッドは、キューの最後に置くこともできるし、優先順位付けされたキュー方式が使用される場合にはキューの最前部又は中央に置くこともできることが考慮される。しかしながら、これらは、開示した主題の範囲内にある２、３の非限定的な実施の形態例にすぎない。
【００４２】
１つの実施の形態では、装置５０１及びシステム５００は、ロック５１０の解放を容易にするロック解放者５４０を含むことができる。１つの実施の形態では、ロック解放者は、図１及び図２により示して上述した技法の全部又は一部を実行できるものとすることができる。別の例では、ロック解放者は、キュー５５０が存在するかどうか又は空であるかどうかを判断できるものとすることができる。キューが存在する場合、ロック獲得者は、キューから最初のスレッド５６０を除去して、２番目のスレッド５７０をキューの最初の位置に移動させることができる。次に、ロック解放者は、ロックが利用可能であることを最初のスレッド５６０に通知することができる。１つの実施の形態では、ロック解放者は、次スレッド値５９７を使用して、２番目のスレッドにアクセスすることができ、待機値５９３を使用して、ロックが利用可能であることを最初のスレッドに通知することができる。しかしながら、これらは、開示した主題の範囲内にある２、３の非限定的な実施の形態例にすぎない。
【００４３】
１つの実施の形態では、装置５０１及びシステム５００は、動的なメモリ割り当て及び割り当て解除を、ロックの個数及びスレッドの個数の合計に実質的に関係した数又はこの合計に実質的に比例した数に制限できるものとすることができる。さらに、ロックの状態５２０又はスレッドの値５９３及び５９７の変更は、競合状態の発生及び他の望ましくないスレッドに関係した影響の発生を最小にしようと試みる技法を介して行うことができることも考慮される。１つの実施の形態では、この変更は、変数を新しい値に設定することを許可する前に、その変数が予測された値と等しいことを確認する「比較アンド記憶」オペレーション（別名「テストアンド設定」オペレーション）によって実行することができる。また、スレッドの待機値５９３及び次スレッド値５９７は、メモリ内及びそのメモリの個別のキャッシュライン内に記憶できることも考慮される。別の実施の形態では、ロックのキューの長さ値５２３及び最後のスレッド値５２８は、メモリの同じキャッシュライン内に記憶することができる。ロックの最初のスレッド値５２５、及び、最後のスレッド値の複製又はシャドウバージョン）は、第２のメモリキャッシュライン内に記憶することができる。しかしながら、これらは、開示した主題の２、３の特異的な実施の形態にすぎず、他の実施の形態も可能であり、考慮される。
【００４４】
本明細書に開示した技法は、どの特定のハードウェア構成にもどの特定のソフトウェア構成にも限定されるものではない。これらの技法は、どの計算環境又は処理環境においても適用可能性を見出すことができる。これらの技法は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組み合わせで実施することができる。これらの技法は、プログラマブルマシンで実行されるプログラムで実施することができる。このプログラマブルマシンは、移動コンピュータ又は静止コンピュータ、個人情報端末、及び類似のデバイス等である。これらの類似のデバイスは、それぞれが、プロセッサ、そのプロセッサによって読み出し可能又はアクセス可能な記憶媒体（揮発性メモリ及び不揮発性メモリ並びに／又は記憶素子が含まれる）、少なくとも１つの入力デバイス、並びに１つ若しくは２つ以上の出力デバイスを含む。プログラムコードは、入力デバイスを使用して入力されたデータに適用されて、説明した機能が実行され、出力情報が生成される。この出力情報は、１つ又は２つ以上の出力デバイスに適用することができる。
【００４５】
各プログラムは、高級手続型プログラミング言語又は高級オブジェクト指向型プログラミング言語で実施されて、処理システムと通信することができる。しかしながら、プログラムは、必要に応じて、アセンブリ言語又はマシン言語で実施することもできる。いずれの場合も、言語は、コンパイル又はインタープリットすることができる。
【００４６】
このような各プログラムは、記憶媒体又は記憶デバイスに記憶することができる。この記憶媒体又は記憶デバイスは、汎用プログラマブルマシン又は専用プログラマブルマシンによって読み出し可能であり、記憶媒体又は記憶デバイスがコンピュータによって読み出されて、本明細書で説明した手続きが実行されると、そのマシンを構成して動作させる。この記憶媒体又は記憶デバイスは、たとえば、コンパクト読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、ハードディスク、ファームウェア、不揮発性メモリ、磁気ディスク、又は類似の媒体若しくはデバイスである。また、システムは、マシン可読記憶媒体又はマシンアクセス可能記憶媒体として実施され、プログラムで構成されることも考慮することができる。ここで、そのように構成された記憶媒体は、マシンを特定の方法で動作させる。他の実施の形態も、添付の特許請求の範囲の範囲内にある。
【００４７】
開示した主題の一定の特徴を図示して本明細書で説明したが、今や当業者には、多くの修正したもの、置換したもの、変更したもの、均等なものが思いつくであろう。したがって、添付の特許請求の範囲は、開示した主題の真の精神の範囲内に入るこのようなすべての修正したもの及び変更したものをカバーすることを目的としていることが理解されよう。
【図面の簡単な説明】
【００４８】
【図１】開示した主題によるロックの獲得及び／又は解放を行うための技法の一実施の形態を示すフローチャートである。
【図２】開示した主題によるロックの獲得及び／又は解放を行うための技法の一実施の形態を示すフローチャートである。
【図３】開示した主題によるロックの獲得及び／又は解放を行うための技法によって利用される状態マシンの一実施の形態を示す状態図である。
【図４】開示した主題によるロックの獲得及び／又は解放を行うための技法の一実施の形態において利用される状態マシンの可能な状態を詳述する表である。
【図５】開示した主題によるロックの獲得及び解放を可能にする装置及びシステムの一実施の形態を示すブロック図である。
【図１】
2007505374.tif 000003
【図２】
2007505374.tif 000004
【図３】
2007505374.tif 000005
【図４】
2007505374.tif 000006
【図５】
2007505374.tif 000007
【国際調査報告】
2007505374.tif 000008
2007505374.tif 000009
2007505374.tif 000010