yohhoyの日記

技術的メモをしていきたい日記

2012-09-01から1ヶ月間の記事一覧

C++ Stream Mutex

C++標準ライブラリのストリームに対する並行入出力操作において、明示的ロックを用いない排他制御の方法について。2017-11-21追記:C++2a(C++20)標準ライブラリに向けて、同期化出力ストリームが採択された(→id:yohhoy:20171121)。本記事で取り上げたN3395…

Boost.Asioのstrand

Boost.Asioライブラリが定義・提供する strand についてメモ。Boost.Asioライブラリが定義する概念上の「ストランド(strand)*1」と、直列化プリミティブとしての「io_service::strandクラス」の混同に注意。 ストランド(strand) 逐次実行されるイベントハン…

ヌルポインタの内部表現

C

プログラミング言語Cにおけるヌルポインタ値の内部表現(≒ビット表現)に関して、標準規格では特に規定しておらずその内部表現は非ゼロであっても良い。*1注意:定数値0はヌルポインタ定数として解釈されるが、ここで言う “ヌルポインタの内部表現” とは関係…

shared_ptr相互乗り入れ

C++11標準ライブラリとBoost.Smart_Pointersライブラリでそれぞれ提供される共有ポインタshared_ptrクラステンプレートの相互運用に関するメモ。本記事の内容はStack Overflowで見つけた質問と回答内容に基づく。注意:あくまで “技術的に相互運用が可能であ…

lock非メンバ関数の使いどころ

C++11標準ライブラリやBoost.Threadライブラリで提供される、複数ロック操作lock非メンバ関数の適用先についてメモ。lock非メンバ関数の仕様上、ロック競合しうる複数ミューテックスを指定してもデッドロック(deadlock)しない。この関数の内部実装には try-a…

Reader-Writerロックの実装

C++11標準ライブラリのスレッドサポートを利用して実装されたReader-Writerロック(Shared/Upgradeロック)。Boost Software License。Howard Hinnant氏の記事Handling mutexes in C++に詳しい解説あり。 http://home.roadrunner.com/~hinnant/mutexes/share…

関数パラメータリストと配列型

C C++

C/C++言語における関数パラメータリスト中の配列型に関するメモ。下記の関数f1, f2はどちらの宣言でも同じ関数(同一の型)として扱われる。 void f1(int a[42], const char b[]); void f1(int * a, const char * b); // a = int型へのポインタ型, b = const…

Boost.Thread 1.50.0 condition_variableタイムアウト付き待機処理の問題

Boost.Threadライブラリ 1.50.0の条件変数boost::condition_variableでは誤った対処(#6130)が行われており、condition_variableオブジェクトのタイムアウト付き待機関数において常に余計なタイムアウト時間が長くとられる。Linux/Mac OS XシステムかつBoo…

tbb::flow::sequencer_nodeとsequence order numberの落とし穴(続き)

前記事ではフローグラフによる実装を行ったが、この設計ならばで並列パイプラインアルゴリズム parallel_pipeline の方が簡潔に記述できる。というより、この手の線形パイプライン処理はパイプライン(pipeline)アルゴリズムで実装すべき。 #include <iostream> #includ</iostream>…

tbb::flow::sequencer_nodeとsequence order numberの落とし穴

Intel TBB フローグラフ(flow graph)のシーケンサノード sequencer_node では、入力アイテムからシーケンス序数(sequence order number)を返すユーザ定義のSequencerファンクタを与えて、後続ノードへ送るアイテム順序を変更する。このシーケンス序数の割当…

C++0x標準ライブラリへの要望リスト(だったもの)

C++

C++0x(現C++11)標準ライブラリに向けて過去挙げられた機能Wishlist。実際に追加されたものから、題目のみで終わったものまで様々。 This is a list of suggested additions to the standard C++ library for the next version of C++ ("C++0x"). This list…