ロックフリーなキューを実装しているクラスです。
[詳解]
#include "nn/nlib/LockFree.h"
template<class T>
class nn::nlib::LockFreeQueue< T >
ロックフリーなキューを実装しているクラスです。
- テンプレート引数
-
T | キューの要素の型です。PODである必要があります。 |
- 説明
Enqueue()
及びDequeue()
メンバ関数がスレッドセーフです。 T
にポインタ型を指定した場合、キューに追加されたT
型のオブジェクトはDestructorForLockFree
を利用して削除されます。 SUCCEED_IF(e == 0);
const int kNumThread = 8;
std::thread th_list[kNumThread];
for (auto& th : th_list) {
th = std::thread([&]() {
Pod pod;
pod.threadid = GetMyThreadId();
for (int i = 0; i < 2; ++i) {
}
}
});
}
for (auto& th : th_list) { th.join(); }
Pod pod;
for (int i = 0; i < kNumThread * 2; ++i) {
SUCCEED_IF(e == 0);
}
- 参照
- http://www.cs.rochester.edu/~scott/papers/1996_PODC_queues.pdf
LockFree.h の 514 行目に定義があります。
◆ DequeueType
◆ ~LockFreeQueue()
◆ Dequeue()
キューから要素を取り出してx
に格納します。スレッドセーフです。
- 引数
-
[in] | x | キューから取りだされた要素が格納される領域 |
- 戻り値
-
LockFree.h の 529 行目に定義があります。
◆ DequeueUnsafe()
キューから要素を取り出してx
に格納します。スレッドセーフではありません。
- 引数
-
[in] | x | キューから取りだされた要素が格納される領域 |
- 戻り値
-
LockFree.h の 533 行目に定義があります。
◆ Enqueue()
◆ EnqueueUnsafe()
キューに要素x
を追加します。スレッドセーフではありません。
- 引数
-
- 戻り値
-
LockFree.h の 531 行目に定義があります。
◆ Init()
キューを初期化します。スレッドセーフではありません。
- 引数
-
[in] | count | キューに追加することの出来る要素の数 |
- 戻り値
-
0 | 成功した場合 |
ENOMEM | メモリの確保に失敗した場合 |
EALREADY | 既に初期化済みの場合 |
LockFree.h の 522 行目に定義があります。
このクラス詳解は次のファイルから抽出されました: