nlib
LockFree.h ファイル

ロックフリーアルゴリズムがサポートされています。 [詳解]

#include <new>
#include "nn/nlib/Config.h"
#include "nn/nlib/TypeTraits.h"
#include "nn/nlib/UniquePtr.h"
#include "nn/nlib/DynamicAlignedStorage.h"

[ソースコード]

クラス

class  nn::nlib::LockFreePipe< N >
 データの送り手側のスレッドと受け手側のスレッドがそれぞれ1つずつの場合、このクラスを用いてロックフリーにデータの受け渡しを行うことができます。 [詳解]
 
class  nn::nlib::ConstructorForLockFree< T >
 オブジェクトを初期化するためのクラステンプレートです。特殊化して利用します。 [詳解]
 
class  nn::nlib::DestructorForLockFree< T >
 オブジェクトをデストラクトするためのクラステンプレートです。特殊化して利用します。 [詳解]
 
class  nn::nlib::LockFreeStack< T >
 ロックフリーなスタックを実装しているクラスです。 [詳解]
 
class  nn::nlib::LockFreeQueue< T >
 ロックフリーなキューを実装しているクラスです。 [詳解]
 
class  nn::nlib::LockFreePriorityQueue< T >
 ロックフリーな優先度つきキューを実装したクラスで、nlib_mqをラップしています。 [詳解]
 
class  nn::nlib::LockFreeBroadcastQueue< T >
 指定された数のリスナーがキューから要素を取得できます。全てのリスナーが取得後、要素はキューから削除されます。 [詳解]
 
class  nn::nlib::LockFreeUnitHeap
 固定メモリサイズの領域を確保・解放をロックフリーで行うことのできるプールアロケータです。 [詳解]
 

名前空間

 nn::nlib
 共通して使われる機能やプラットフォームへの依存度が高い機能が実装されます。 nlib Platform APIs も御覧ください。nlib_nsはエイリアスです。
 

関数

template<class T >
errno_t nn::nlib::LockFreeInit (T **ptr) noexcept
 スレッドセーフにオブジェクトの構築を行います。 [詳解]
 

詳解

ロックフリーアルゴリズムがサポートされています。

説明
CPUのコア数が増えるに従って、mutexを利用した同期が性能向上への障害となるようになっています。 ロックフリーアルゴリズムとは共有データにロックをかけることなしに、複数スレッドが同時並行かつ安全に読み書きするアルゴリズムです。 これは主にCAS(Compare-and-Swap)命令という特殊なCPU命令を利用することで実現されています。 ロックフリーアルゴリズムを利用することで、スレッドをブロックせずに共有データを利用することができます。 また、ロックにつきものの、デッドロック、ライブロック、優先度逆転といった問題を回避することもできます。

LockFree.h に定義があります。