nlib
nn::nlib::LockFreeStack< T > クラステンプレート

ロックフリーなスタックを実装しているクラスです。 [詳解]

#include "nn/nlib/LockFree.h"

公開型

typedef T * PopType
 Pop(), PopUnsafe()の引数となる型です [詳解]
 

公開メンバ関数

 LockFreeStack () noexcept
 デフォルトコンストラクタです。
 
 ~LockFreeStack () noexcept
 デストラクタです。 [詳解]
 
errno_t Init (size_t count) noexcept
 スタックを初期化します。スレッドセーフではありません。 [詳解]
 
errno_t Push (const T &x) noexcept
 スタックに要素xを積みます。スレッドセーフです。 [詳解]
 
errno_t Pop (PopType x) noexcept
 スタックから要素を取り出してxに格納します。スレッドセーフです。 [詳解]
 
errno_t PushUnsafe (const T &x) noexcept
 スタックに要素xを積みます。スレッドセーフではありません。 [詳解]
 
errno_t PopUnsafe (PopType x) noexcept
 スタックから要素を取り出してxに格納します。スレッドセーフではありません。 [詳解]
 
void SwapUnsafe (LockFreeStack &rhs) noexcept
 オブジェクトをスワップします。スレッドセーフではありません。
 

詳解

template<class T>
class nn::nlib::LockFreeStack< T >

ロックフリーなスタックを実装しているクラスです。

テンプレート引数
Tスタックに積む要素の型です。PODである必要があります。
説明
Push()及びPop()メンバ関数がスレッドセーフです。 Tにポインタ型を指定した場合、スタックに積まれたT型のオブジェクトはDestructorForLockFreeによって自動的に削除されます。
コード例
LockFreeStack<MyClass*> stack;
e = stack.Init(1024);
if (nlib_is_error(e)) {
// ERROR
}
.....
MyClass* elem = new MyClass();
.....
e = stack.Push(elem);
if (nlib_is_error(e)) {
// try again or ERROR
}
.....
LockFreeStack<MyClass*>::PopType x;
e = stack.Pop(x);
if (nlib_is_error(e)) {
// try again or ERROR
}
.....
// x is automatically deleted

LockFree.h450 行目に定義があります。

型定義メンバ詳解

§ PopType

template<class T >
nn::nlib::LockFreeStack< T >::PopType

Pop(), PopUnsafe()の引数となる型です

説明
Tがポインタ型の場合はDestructorForLockFreeで自動的にデストラクトされるようにUniquePtrがtypedefされています。

LockFree.h452 行目に定義があります。

構築子と解体子

§ ~LockFreeStack()

template<class T >
nn::nlib::LockFreeStack< T >::~LockFreeStack ( )
inlinenoexcept

デストラクタです。

説明
要素が残っている場合は、それぞれの要素をDestructorForLockFreeを利用して削除します。 必要な場合は関数テンプレートを特殊化して必要な処理を実行してください。

LockFree.h454 行目に定義があります。

関数詳解

§ Init()

template<class T >
nn::nlib::LockFreeStack< T >::Init ( size_t  count)
inlinenoexcept

スタックを初期化します。スレッドセーフではありません。

引数
[in]countスタックに積むことのできる要素の数
戻り値
0成功した場合
ENOMEMメモリの確保に失敗した場合
EALREADY既に初期化済みの場合

LockFree.h458 行目に定義があります。

§ Pop()

template<class T >
nn::nlib::LockFreeStack< T >::Pop ( PopType  x)
inlinenoexcept

スタックから要素を取り出してxに格納します。スレッドセーフです。

引数
[in]xスタックから取りだされた要素が格納される領域
戻り値
0成功した場合
EAGAINスタックが空の場合

LockFree.h465 行目に定義があります。

§ PopUnsafe()

template<class T >
nn::nlib::LockFreeStack< T >::PopUnsafe ( PopType  x)
inlinenoexcept

スタックから要素を取り出してxに格納します。スレッドセーフではありません。

引数
[in]xスタックから取りだされた要素が格納される領域
戻り値
0成功した場合
EAGAINスタックが空の場合

LockFree.h469 行目に定義があります。

§ Push()

template<class T >
nn::nlib::LockFreeStack< T >::Push ( const T &  x)
inlinenoexcept

スタックに要素xを積みます。スレッドセーフです。

引数
[in]xスタックに積まれる要素
戻り値
0成功した場合
EAGAINスタックが一杯の場合

LockFree.h464 行目に定義があります。

§ PushUnsafe()

template<class T >
nn::nlib::LockFreeStack< T >::PushUnsafe ( const T &  x)
inlinenoexcept

スタックに要素xを積みます。スレッドセーフではありません。

引数
[in]xスタックに積まれる要素
戻り値
0成功した場合
EAGAINスタックが一杯の場合

LockFree.h467 行目に定義があります。


このクラス詳解は次のファイルから抽出されました: