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が必須で排他が必要でない時に使用します。
※1;Nest Lock/Unlock になります。 ※2;Time0以外は、ポーリング監視するため、多少の負荷、ラグがあります。

マクロ定義詳解

◆ EXCLUSIVE

#define EXCLUSIVE (   CLS)    CExclusive _cExclus_(CLS);

簡易排他制御マクロ.

CLSに ISynchronized 派生のインスタンスを指定すると、そのスコープ間は、
排他されます。
使用例

    class CFoo{
      CSyncSection m_syc;
              ;
      void ab(void){
        if ( XX )
        {
          EXCLUSIVE(m_syc); //この間、排他される。        
                ;           ///
        }
      }
    };
 
必要ファイル
TnbSync.h
日付
06/04/17 新規作成

TnbSync.h788 行目に定義があります。

◆ EXCLUSIVE2

#define EXCLUSIVE2 (   CLS1,
  CLS2 
)    CExclusive _cExclus1_(CLS1); CExclusive _cExclus2_(CLS2);

簡易排他ツイン制御マクロ.

CLS1,CLS2 に ISynchronized 派生のインスタンスを指定すると、そのスコープ間は、
排他されます。
必要ファイル
TnbSync.h
日付
06/07/03 新規作成

TnbSync.h820 行目に定義があります。

◆ EXCLUSIVE2_

#define EXCLUSIVE2_ (   CLS1,
  CLS2 
)
値:
TRACE3("%s(%d):[%d] Lock要求\n",_T(__FILE__),__LINE__,::GetCurrentThreadId()); \
CExclusive _cExclus1_(CLS1); CExclusive _cExclus2_(CLS2); \
TRACE3("%s(%d):[%d] Lock成功\n",_T(__FILE__),__LINE__,::GetCurrentThreadId());
簡易排他制御クラス
Definition: TnbSync.h:732

TRACE付き簡易排他ツイン制御マクロ.

CLS1,CLS2 に ISynchronized 派生のインスタンスを指定すると、そのスコープ間は、
排他されます。
必要ファイル
TnbSync.h
日付
06/07/27 新規作成

TnbSync.h835 行目に定義があります。

◆ EXCLUSIVE_

#define EXCLUSIVE_ (   CLS)
値:
TRACE3("%s(%d):[%d] Lock要求\n",_T(__FILE__),__LINE__,::GetCurrentThreadId()); \
CExclusive _cExclus_(CLS); \
TRACE3("%s(%d):[%d] Lock成功\n",_T(__FILE__),__LINE__,::GetCurrentThreadId());

TRACE付き簡易排他制御マクロ.

CLSに ISynchronized 派生のインスタンスを指定すると、そのスコープ間は、
排他されます。
必要ファイル
TnbSync.h
日付
06/07/27 新規作成

TnbSync.h802 行目に定義があります。

◆ SYNCBLOCK

#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;
      }
    };
 
必要ファイル
TnbSync.h
日付
06/05/01 新規作成

TnbSync.h912 行目に定義があります。