2012-09-01から1ヶ月間の記事一覧
C++標準ライブラリのストリームに対する並行入出力操作において、明示的ロックを用いない排他制御の方法について。2017-11-21追記:C++2a(C++20)標準ライブラリに向けて、同期化出力ストリームが採択された(→id:yohhoy:20171121)。本記事で取り上げたN3395…
Boost.Asioライブラリが定義・提供する strand についてメモ。Boost.Asioライブラリが定義する概念上の「ストランド(strand)*1」と、直列化プリミティブとしての「io_service::strandクラス」の混同に注意。 ストランド(strand) 逐次実行されるイベントハン…
プログラミング言語Cにおけるヌルポインタ値の内部表現(≒ビット表現)に関して、標準規格では特に規定しておらずその内部表現は非ゼロであっても良い。*1注意:定数値0はヌルポインタ定数として解釈されるが、ここで言う “ヌルポインタの内部表現” とは関係…
C++11標準ライブラリとBoost.Smart_Pointersライブラリでそれぞれ提供される共有ポインタshared_ptrクラステンプレートの相互運用に関するメモ。本記事の内容はStack Overflowで見つけた質問と回答内容に基づく。注意:あくまで “技術的に相互運用が可能であ…
C++11標準ライブラリやBoost.Threadライブラリで提供される、複数ロック操作lock非メンバ関数の適用先についてメモ。lock非メンバ関数の仕様上、ロック競合しうる複数ミューテックスを指定してもデッドロック(deadlock)しない。この関数の内部実装には try-a…
C++11標準ライブラリのスレッドサポートを利用して実装されたReader-Writerロック(Shared/Upgradeロック)。Boost Software License。Howard Hinnant氏の記事Handling mutexes in C++に詳しい解説あり。 http://home.roadrunner.com/~hinnant/mutexes/share…
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の条件変数boost::condition_variableでは誤った対処(#6130)が行われており、condition_variableオブジェクトのタイムアウト付き待機関数において常に余計なタイムアウト時間が長くとられる。Linux/Mac OS XシステムかつBoo…
前記事ではフローグラフによる実装を行ったが、この設計ならばで並列パイプラインアルゴリズム parallel_pipeline の方が簡潔に記述できる。というより、この手の線形パイプライン処理はパイプライン(pipeline)アルゴリズムで実装すべき。 #include <iostream> #includ</iostream>…
Intel TBB フローグラフ(flow graph)のシーケンサノード sequencer_node では、入力アイテムからシーケンス序数(sequence order number)を返すユーザ定義のSequencerファンクタを与えて、後続ノードへ送るアイテム順序を変更する。このシーケンス序数の割当…
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…