TNB Library
|
クラス | |
class | CAbstractSyncHandle |
HANDLE型排他抽象クラス [詳解] | |
class | CCyclicBarrier |
バリアクラス [詳解] | |
class | CExchangerT< TYP > |
スレッド間値入れ替えテンプレートクラス. [詳解] | |
class | CExclusive |
簡易排他制御クラス [詳解] | |
class | CExclusiveEx |
簡易排他制御クラス [詳解] | |
class | CSyncCounter |
カウンタ式排他クラス [詳解] | |
class | CSyncDummy |
排他管理ダミークラス [詳解] | |
class | CSyncEvent |
Event排他管理クラス [詳解] | |
class | CSyncMetered |
Metered排他管理クラス [詳解] | |
class | CSyncMutex |
Mutex排他管理クラス [詳解] | |
class | CSyncSection |
Section排他管理クラス [詳解] | |
class | CSyncSectionEx |
拡張Section排他管理クラス [詳解] | |
class | CSyncSemaphore |
Semaphore排他管理クラス [詳解] | |
class | CSyncWaitableTimer |
WaitableTimer排他管理クラス [詳解] | |
struct | CCyclicBarrier::IListener |
バリアクラスのリスナーインターフェース [詳解] | |
struct | ISynchronized |
排他基本インターフェース [詳解] | |
マクロ定義 | |
#define | EXCLUSIVE(CLS) CExclusive _cExclus_(CLS); |
簡易排他制御マクロ. [詳解] | |
#define | EXCLUSIVE2(CLS1, CLS2) CExclusive _cExclus1_(CLS1); CExclusive _cExclus2_(CLS2); |
簡易排他ツイン制御マクロ. [詳解] | |
#define | EXCLUSIVE2_(CLS1, CLS2) |
TRACE付き簡易排他ツイン制御マクロ. [詳解] | |
#define | EXCLUSIVE_(CLS) |
TRACE付き簡易排他制御マクロ. [詳解] | |
#define | SYNCBLOCK(CLS) if (false); else for ( CExclusiveEx _cExclusEx_(CLS); _cExclusEx_ == 0; ) |
簡易排他ブロック制御マクロ. [詳解] | |
ISynchronized
を実装したクラスは、EXCLUSIVE
マクロや SYNCBLOCK
マクロで、容易にブロック排他が可能です。CExchangerT
クラスや、 Javaライクな CCyclicBarrier
クラスも有ります。SINGLETON_CONSTRUCTOR
マクロを使うことで、 スレッドセーブにシングルトンを実現することも出来ます。ISynchronized
を実装したクラス クラス名 | タイプ | 処理速度 | プロセス間 | 同一スレッド | タイムアウト | カウンタ | 備考 |
CSyncSection | CriticalSection | Fast | No | No ※1 | No | No | 同一プロセス内で処理(特に関数)の排他を行うの向いています。 |
CSyncSectionEx | CriticalSection (NT専用) | Fast | No | No ※1 | Yes | No | 同一プロセス内で処理(特に関数)の排他を行うの向いています。 |
CSyncMutex | Mutex | Slow | Yes | No ※1 | Yes | No | 別プロセス間で処理の排他を行うのに向いています。 |
CSyncSemaphore | Semaphore | Slow | Yes | No | Yes | Yes | 限られた数のユーザーしかサポートできない共有リソースへのアクセスを制御するのに有用です。 |
CSyncEvent | Event | Slow | Yes | Yes | Yes | No | 別スレッドあるいは別プロセスで処理の同期を取るのに向いています。 |
CSyncCounter | Counter | Fast | No | Yes | Yes ※2 | Yes | カウンタで排他処理をします。処理中なら処理しない、という排他処理に向いています。 |
CSyncMetered | MeteredSection | Fast | Yes | Yes | Yes | Yes | カウンタも持つ、別プロセスでも使用可能な高速なオブジェクトです。 |
CSyncDummy | ダミー | VeryFast | - | - | - | - | 排他しません。排他Objectが必須で排他が必要でない時に使用します。 |
#define EXCLUSIVE | ( | CLS | ) | CExclusive _cExclus_(CLS); |
簡易排他制御マクロ.
CLSに ISynchronized 派生のインスタンスを指定すると、そのスコープ間は、 排他されます。
class CFoo{ CSyncSection m_syc; ; void ab(void){ if ( XX ) { EXCLUSIVE(m_syc); //この間、排他される。 ; /// } } }; |
#define EXCLUSIVE2 | ( | CLS1, | |
CLS2 | |||
) | CExclusive _cExclus1_(CLS1); CExclusive _cExclus2_(CLS2); |
#define EXCLUSIVE2_ | ( | CLS1, | |
CLS2 | |||
) |
TRACE付き簡易排他ツイン制御マクロ.
CLS1,CLS2 に ISynchronized 派生のインスタンスを指定すると、そのスコープ間は、 排他されます。
#define EXCLUSIVE_ | ( | CLS | ) |
TRACE付き簡易排他制御マクロ.
CLSに ISynchronized 派生のインスタンスを指定すると、そのスコープ間は、 排他されます。
#define SYNCBLOCK | ( | CLS | ) | if (false); else for ( CExclusiveEx _cExclusEx_(CLS); _cExclusEx_ == 0; ) |
簡易排他ブロック制御マクロ.
CLSに ISynchronized 派生のインスタンスを指定すると、この後に続くブロックは、 排他されます。
class CFoo{ CSyncSection m_syc; ; void ab(void){ int i=0; SYNCBLOCK(syc) { //この間、排他される。 ; /// } i=3; } }; |