データの送り手側のスレッドと受け手側のスレッドがそれぞれ1つずつの場合、このクラスを用いてロックフリーにデータの受け渡しを行うことができます。
[詳解]
#include "nn/nlib/LockFree.h"
template<size_t N>
class nn::nlib::LockFreePipe< N >
データの送り手側のスレッドと受け手側のスレッドがそれぞれ1つずつの場合、このクラスを用いてロックフリーにデータの受け渡しを行うことができます。
- テンプレート引数
-
N | バッファ・サイズです。2のべき乗である必要があります。 |
- 説明
- データはバッファを介してコピーされることに注意してください。 それ程大きくないデータのやりとりに向いています。
LockFreePipe
を2つ使うことで2つのスレッド間でデータの送受信を行うことができます。
- コード例
LockFreePipe<1024> pipe;
.....
{
.....
uint8_t command[16];
.....
while (pipe.Write(command, sizeof(command)) != 0) {
}
.....
}
{
.....
uint8_t command[16];
while (pipe.Read(command, sizeof(command)) != 0) {
}
.....
}
LockFree.h の 352 行目に定義があります。
データをパイプから読み込みます。スレッドセーフです。
- 引数
-
[out] | dest | 読み込んだデータが格納される領域 |
[in] | nbytes | 読み込むバイト数 |
- 戻り値
-
0 | 成功した場合 |
EAGAIN | バッファにnbytes 未満のデータしかない場合 |
LockFree.h の 361 行目に定義があります。
データをパイプに書き込みます。スレッドセーフです。
- 引数
-
[in] | src | 書きこむデータが格納される領域 |
[in] | nbytes | 書き込むバイト数 |
- 戻り値
-
0 | 成功した場合 |
EAGAIN | バッファの空き容量がnbytes 未満の場合 |
LockFree.h の 392 行目に定義があります。
このクラス詳解は次のファイルから抽出されました: