ロックフリーなスタックを実装しているクラスです。
[詳解]
#include "nn/nlib/LockFree.h"
template<class T>
class nn::nlib::LockFreeStack< T >
ロックフリーなスタックを実装しているクラスです。
- テンプレート引数
-
T | スタックに積む要素の型です。PODである必要があります。 |
- 説明
Push()
及びPop()
メンバ関数がスレッドセーフです。 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) {
while (stack.
Push(pod) != 0) {
}
}
});
}
for (auto& th : th_list) { th.join(); }
Pod pod;
for (int i = 0; i < kNumThread * 2; ++i) {
SUCCEED_IF(e == 0);
}
LockFree.h の 435 行目に定義があります。
◆ PopType
◆ ~LockFreeStack()
◆ Init()
スタックを初期化します。スレッドセーフではありません。
- 引数
-
[in] | count | スタックに積むことのできる要素の数 |
- 戻り値
-
0 | 成功した場合 |
ENOMEM | メモリの確保に失敗した場合 |
EALREADY | 既に初期化済みの場合 |
LockFree.h の 443 行目に定義があります。
◆ Pop()
スタックから要素を取り出してx
に格納します。スレッドセーフです。
- 引数
-
[in] | x | スタックから取りだされた要素が格納される領域 |
- 戻り値
-
LockFree.h の 450 行目に定義があります。
◆ PopUnsafe()
スタックから要素を取り出してx
に格納します。スレッドセーフではありません。
- 引数
-
[in] | x | スタックから取りだされた要素が格納される領域 |
- 戻り値
-
LockFree.h の 454 行目に定義があります。
◆ Push()
◆ PushUnsafe()
スタックに要素x
を積みます。スレッドセーフではありません。
- 引数
-
- 戻り値
-
LockFree.h の 452 行目に定義があります。
このクラス詳解は次のファイルから抽出されました: