[前へ] [目次へ] [次へ]
このクラスはクリティカルセクションの同期オブジェクトを扱うクラスです。
このクラスのインスタンスと CriticalSection のインスタンスを
組み合わせることで、排他制御を行います。
●継承
このクラスは継承をしていません。
●インターフェイスとインターフェイスメソッド
このクラスはインターフェイスの実装宣言をしていません。
●クラスメソッド
このクラスはクラスメソッドを持っていません。
●クラスメンバメソッド
●クラス共有変数
このクラスはクラス共有変数を持っていません。
●インスタンス変数
このクラスはインスタンス変数を持っていません。
●C++レベル追加情報
クラスID: FGES_CLASSID_CSLOCKOBJECT
クラス名: FGESCSLockObject
CSLockObject::Lock
public Bool Lock(editable CriticalSection csobj)
csobj が示すクリティカルセクションをロックします。
指定したクリティカルセクションが現在ロックされている場合で、
ロックしているのが呼び出したスレッドでない場合、
ロックが獲得できるまでこのメソッドから戻らず、スレッドは一時停止します。
クリティカルセクションのロックに成功するとロック状態が保存され、メソッドから戻ります。
このオブジェクトがロック状態を保存している状態でこのメソッドを再度呼び出すと例外が発生します。
複数のクリティカルセクションを使う場合順番によってはハマる(デッドロック)可能性があります。
ロックする順序や状況に注意してください。
排他制御する範囲はできるだけ短くするべきです。
ロックが不要になったら Release を呼ぶか、このオブジェクト自体を解放してください。
戻り値:ロックに成功すると真を返します
editable CriticalSection csobj :ロックするクリティカルセクション
先頭へ
CSLockObject::LockTry
public Bool LockTry(editable CriticalSection csobj)
csobj が示すクリティカルセクションのロックを試みます。
指定したクリティカルセクションが現在ロックされている場合で、
ロックしているのが呼び出したスレッドでない場合、ロックが失敗し偽を返します。
クリティカルセクションのロックに成功するとロック状態が保存され、真を返します。
このオブジェクトがロック状態を保存している状態でこのメソッドを再度呼び出すと例外が発生します。
複数のクリティカルセクションを使う場合順番によってはハマる(デッドロック)可能性があります。
ロックする順序や状況に注意してください。
排他制御する範囲はできるだけ短くするべきです。
ロックが不要になったら Release を呼ぶか、このオブジェクト自体を解放してください。
戻り値:ロックに成功すると真を返します
editable CriticalSection csobj :ロックを試みるクリティカルセクション
先頭へ
CSLockObject::Release
public Bool Release()
このオブジェクトが保持しているロックを解放します。
他のスレッドで同じクリティカルセクションに対する Lock が呼び出されている場合、
スレッドの切り替え後に最初に実行権を取得したスレッドがロックします。
このメソッドでロックを解放した後、即座に再度 Lock するとスレッド切り替えが起こらず、
再度同じスレッドがロックしてしまう可能性があります。
ローテーションのような扱いをしたい場合、再度 Lock を呼ぶ前に pause を実行してスレッドを切り替えてください。
このオブジェクトがロックを保持していない場合、何も起こりません。
戻り値:この呼び出しでロックが解放された場合、真を返します
先頭へ
[前へ] [目次へ] [次へ]
最終更新 2020/06/10