クリティカルセクションクラスです。
[詳解]
#include <OnlineCore/src/Platform/Core/CriticalSection.h>
クリティカルセクションクラスです。
このクラスは、 Enter() および Leave() の呼び出し区間で、一つのスレッドのみが処理を行うことを保証します。 誤って CriticalSection を永久的にロックすることを避けるため、 ScopedCS クラスを使用することができます。
スレッドセーフなスレッドモードを使用している場合のみ CriticalSection が有効になります。 スレッドセーフでないスレッドモードを使用している場合は CriticalSection::Enter() は何も行いません。
Scheduler::SystemLock() で取得した CriticalSection を使用すると NEX の内部処理を一時停止でき、 その間システムの変更が発生しないことを保証できます。
- 参照
- ScopedCS
virtual void nn::nex::CriticalSection::Enter |
( |
| ) |
|
|
virtual |
クリティカルセクションに入ります。
このメソッドを呼び出すスレッドは、 Leave() を呼び出すまでクリティカルセクションを所有します。 すでに他のスレッドがクリティカルセクションに入っている場合はそのスレッドがクリティカルセクションを出るまで 現在のスレッドがブロックします。
- 参照
- ScopedCS::ScopedCS
virtual qBool nn::nex::CriticalSection::TryEnter |
( |
| ) |
|
|
virtual |
クリティカルセクションに入るのを試みます。
他のスレッドがすでにクリティカルセクションを所有していない場合にクリティカルセクションに入ります。 このメソッドを呼び出すスレッドは、 Leave() を呼び出すまでクリティカルセクションを所有します。 すでに他のスレッドがクリティカルセクションに入っている場合は 本関数は即座に false を返し、クリティカルセクションに入りません。 スレッドセーフでないスレッドモードを使用している場合は常に true を返します。
- 戻り値一覧:
true クリティカルセクションへ入れた。
false クリティカルセクションへ入れなかった。
virtual void nn::nex::CriticalSection::Leave |
( |
| ) |
|
|
virtual |
static void nn::nex::CriticalSection::SetEnableDetectRaceCondition |
( |
qBool |
enable | ) |
|
|
static |
スレッド競合をチェックする機能を無効化/有効化します。
Debug 及び Develop ビルドでは NEX のスレッドモードがスレッドアンセーフとして設定されている場合に、 アプリケーションが NEX の API を並列に呼び出していないかをチェックしています。 この関数ではその機能を一時的に無効化/有効化します。 この機能を無効化するのは非常に危険です。テスト目的でのみ機能を無効化できます。
- 引数
-
[in] | enable | true を指定すると機能を有効化し、false を指定すると無効化します。 |
static qBool nn::nex::CriticalSection::GetEnableDetectRaceCondition |
( |
| ) |
|
|
static |
スレッド競合をチェックする機能が有効かどうかを取得します。
- 戻り値
- スレッド競合をチェックする機能が有効かどうか。