yohhoyの日記

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

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

C++ Transactional Memory言語拡張の紹介

本文こちら→Boost.勉強会 #10 に参加しました - yohhoyの日記(別館)スライド資料:http://www.slideshare.net/yohhoy/boostjp10-tm-20120728

atomic compare_exchange_weak/strong関数

C++

C++11標準ライブラリのatomic操作関数compare_exchange_weakとcompare_exchange_strongについてメモ。両関数ともに変数のatomicなCAS(compare-and-swap)操作を提供する。weak版とstrong版との動作仕様は、weak版では “交換可能な場合でもCAS操作失敗する可能…

vector/arrayとUniform initialization+Initializer list

C++

C++11標準ライブラリstd::vector, std::arrayにおいて Uniform initialization と Initializer list を組み合わせた場合に、N3337現在ではそれぞれ異なる表記が必要となる。2012年7月現在、CWG defect #1270に挙げられている*1。2013-11-16追記:CWG#1270が…

一回だけ呼び出し可能な関数オブジェクト

C++

std::async+std::launch::deferredで一回だけ呼び出し可能な関数オブジェクト(のようなモノ)。 #include <future> #include <functional> // bad_function_call #include <utility> template <class R> class once_function { std::future<R> ftr_; public: template <class F, class... Args> explicit once_function(F&& f</class></r></class></utility></functional></future>…

__bool_true_false_are_defined

C

C99以降のC標準ライブラリヘッダstdbool.hでは、マクロbool, true, falseが定義済みであることを表すマクロ__bool_true_false_are_definedを定義する。どうでもいいメモ:C99までで一番長い識別子名?N1256 7.16/p1-3より引用。 1 The header <stdbool.h> defines four </stdbool.h>…

atomic変数のstore/load操作と代入/型変換

C++

C++11標準ライブラリのatomic変数std::atomic<T>について、型Tからatomic<T>への代入はstore操作に等しく、atomic<T>から型Tへの暗黙型変換はload操作に等しい*1。 #include <atomic> std::atomic<int> a; int x; a = 5; // a.store(5, std::memory_order_seq_cst); x = a; // x = </int></atomic></t></t></t>…

タイムアウト関数とsteady clock

C++

C++11標準ライブラリの絶対時刻によるタイムアウト付き待機処理(xxx_until系関数)を常に意図通り動作させるには、クロックとしてstd::chrono::system_clockではなくstd::chrono::steady_clockを利用する*1。下記コードにおいてsystem_clock::is_steady == …

標準入出力とbasic_ios::tie

C++

標準入力ストリームcinと標準エラーストリームcerrは、それぞれ標準出力ストリームcoutに結び付け(tie)られている。N3337 27.4.2/p2, p5, 27.5.5.3/p1より該当箇所を引用。*1 istream cin; 2 After the object cin is initialized, cin.tie() returns &cout.…

標準入出力のリダイレクション

C++

標準入出力ストリーム(cin, cout等)の入出力先を一時的に変更するヘルパクラス。 std::ifstream("input.txt"); ioredirector rd0(std::cin, ifs); std::string s; while (std::getline(std::cin, s)) /* input.txtから1行読込 */; // coutへ出力... 標準出力…

tee ostream

C++

UNIX tee(2)コマンド っぽく動作するostream。ストリーム出力すると予めバインドした2個の出力ストリームに同データを転送する。 std::ofstream ofs("log.txt"); tee_ostream tee(std::cout, ofs); // teeストリーム作成 tee << "tee emulation" << std::end…

和積演算(FMA)

C C++

C99標準ライブラリではデジタル信号処理の定番、和積演算(FMA; fused multiply-add)fma関数が追加されている。同関数はC++11標準ライブラリ<cmath>ヘッダでも提供される。fma関数では和積演算を単一の演算子として浮動小数点数の丸めを行う。すなわち通常の 乗算→丸</cmath>…

lock-freeとaddress-free

C++

C++11標準ライブラリにおけるatomic変数のロックフリー(lock-free)に関連して、規格中で言及されている "address-free" についてメモ。N3337 29.4/p3より引用。 [Note: Operations that are lock-free should also be address-free. That is, atomic operati…

(無印)→Ex→ExEx

Windows APIでよく見る関数名XxxxExには、発展系XxxxExExまで到達した関数名が存在する。 EnumCalendarInfo function EnumCalendarInfoEx function EnumCalendarInfoExEx function 関連URL winapi - What does it mean when `Ex` is added to a function/met…

volatile版atomic操作関数が存在する理由

C++

C++11標準ライブラリのatomic変数において、操作関数にvolatile非修飾/修飾版の2種類が提供される理由。volatile変数とatomic変数は直交する概念であり、単に「volatileオブジェクトに対してもatomic操作を提供するため」に追加されている。*12021-04-21追…