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

ロックフリーな優先度つきキューを実装したクラスで、nlib_mqをラップしています。 [詳解]

#include "nn/nlib/LockFree.h"

公開型

typedef UniquePtr< T, DestructorForLockFree< T > > DequeueType
 Dequeue()の引数となる型です [詳解]
 

公開メンバ関数

 LockFreePriorityQueue () noexcept
 デフォルトコンストラクタです。
 
 ~LockFreePriorityQueue () noexcept
 デストラクタです。 [詳解]
 
errno_t Init (size_t max_size) noexcept
 キューを初期化します。スレッドセーフではありません。 [詳解]
 
errno_t Close () noexcept
 キューをクローズし初期化前の状態にします。スレッドセーフではありません。 [詳解]
 
errno_t Enqueue (T *obj, int prio) noexcept
 キューに要素を追加します。スレッドセーフです。 [詳解]
 
errno_t Dequeue (DequeueType &obj, int *prio) noexcept
 キューから要素を取り出します。スレッドセーフです。 [詳解]
 
void SwapUnsafe (LockFreePriorityQueue &rhs) noexcept
 オブジェクトをスワップします。スレッドセーフではありません。
 

詳解

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

ロックフリーな優先度つきキューを実装したクラスで、nlib_mqをラップしています。

テンプレート引数
Tキューの要素の型です。
説明
必要な場合はDestructorForLockFree<T>を特殊化して、要素型Tを解体するコードを記述する必要があります。 また、Dequeue()の実行中にEnqueue()が実行された場合、Dequeue()が最高優先度の要素を返さない場合があります。

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

型定義メンバ詳解

◆ DequeueType

template<class T >
nn::nlib::LockFreePriorityQueue< T >::DequeueType

Dequeue()の引数となる型です

説明
DestructorForLockFreeで自動的にデストラクトされるようにUniquePtrがtypedefされています。

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

構築子と解体子

◆ ~LockFreePriorityQueue()

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

デストラクタです。

説明
キューに要素が残っている場合はDestructorForLockFree<T>により解体されます。

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

関数詳解

◆ Close()

template<class T >
nn::nlib::LockFreePriorityQueue< T >::Close ( )
inlinenoexcept

キューをクローズし初期化前の状態にします。スレッドセーフではありません。

戻り値
0ならば成功
説明
キューに要素が残っている場合はDestructorForLockFree<T>によりデストラクトされます。

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

◆ Dequeue()

template<class T >
nn::nlib::LockFreePriorityQueue< T >::Dequeue ( DequeueType obj,
int *  prio 
)
inlinenoexcept

キューから要素を取り出します。スレッドセーフです。

引数
[out]objキューから取り出されたオブジェクト
[out]prioobjの優先度
戻り値
nlib_mq_receive()が返す値

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

◆ Enqueue()

template<class T >
nn::nlib::LockFreePriorityQueue< T >::Enqueue ( T *  obj,
int  prio 
)
inlinenoexcept

キューに要素を追加します。スレッドセーフです。

引数
[in]obj要素へのポインタ
[in]prio0以上31以下の優先度
戻り値
nlib_mq_send()が返す値

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

◆ Init()

template<class T >
nn::nlib::LockFreePriorityQueue< T >::Init ( size_t  max_size)
inlinenoexcept

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

引数
[in]max_sizeキューに格納できる要素の最大数
戻り値
0成功した場合
EINVALmax_sizeINT32_MAXを超えている場合
EALREADY既に初期化済みの場合
その他nlib_mq_open()が返すエラー

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


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