yohhoyの日記

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

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

futureとpromiseのあれこれ(実践編)

C++11標準ライブラリのstd::future<T>,std::promise<T>を実際に利用するときの注意点メモ。gcc系共通の注意点として、g++オプションに「-std=c++0x -pthread」を指定する必要がある。前者はC++11機能サポートを有効に、後者はスレッド関連機能を有効にするオプショ</t></t>…

futureとpromiseのあれこれ(理論編)

C++

C++11標準ライブラリで新しく追加されたstd::promiseとstd::futureについてメモ。 future/promiseの基本 両者ともに標準ヘッダ <future> にて定義されるクラステンプレートであり、「別スレッドでの処理完了を待ち、その処理結果を取得する」といった非同期処理を実</future>…

gcc 4.6.2@MacではC++11標準スレッドを利用不可

Mac OS Xのgcc 4.6.2では、C++標準ライブラリのうちスレッド関連機能を利用できない。同環境下ではマクロ_GLIBCXX_HAS_GTHREADSが定義されないため、下記の標準ヘッダが提供する機能を利用できない。MacOS XのPThreadがタイムアウト付き待機関数を正しく実装…

gets関数の最期

C C++

C標準ライブラリにおいてバッファオーバーフロー脆弱性の代名詞とされていた関数getsは、プログラミング言語Cの最新規格C11にて標準規格から削除された。 2018-09-01追記:プログラミングC++言語においてもC++14で削除された。 #include <stdio.h> char buf[10]; gets</stdio.h>…

C++11のcoutとスレッド安全性

C++

C++標準ライブラリのI/Oストリームが提供するstd::coutに対して、複数スレッドから同時に出力したときの振る舞いについてメモ。(C++03以前については、処理系依存が自明のため対象としない。)C++11標準規格によれば、下記が保証される。 既定の状態 または…

bind placeholderの最大数

C++11標準ライブラリに新しく追加された std::bind で利用する、引数のプレースホルダ( std::placeholders::_1 とか)の最大数についてメモ。 C++11標準規格では少なくとも _1,... _10 まで定義される。処理系定義。 Boost.Bindでは _1,... _9 まで提供する…

名前空間posix

C++11からは新しく名前空間 posix が予約された。ただし名前空間以下には何も定義されていない。 17.6.4.2.2 Namespace posix 1 The behavior of a C++ program is undefined if it adds declarations or definitions to namespace posix or to a namespace …

endl, ends, flushの正体

C++

C++標準ライブラリのI/Oストリームで提供される、std::endl, std::ends, std::flushについてメモ。endl/ends/flushの実体は、標準ヘッダ <ostream>*1にて定義される関数テンプレート。C++標準規格ではマニピュレータ(manipulator)と呼称している。ぞれぞれの概要と、</ostream>…

(翻訳)Intel Threading Building Blocks フローグラフによるパイプライン構成方法

元記事:How to make a pipeline with an Intel® Threading Building Blocks flow graph | Intel® Software, Michael Voss氏, 2011/9/14自分自身の理解のために日本語訳を行ったIntel TBB フローグラフ解説記事。 Intel® Threading Building Blocks フローグ…

(翻訳)Intel Threading Building Blocks フローグラフを用いたウェーブフロント計算の実装

元記事:Implementing a wave-front computation using the Intel® Threading Building Blocks flow graph | Intel® Software, Michael Voss氏, 2011/9/9自分自身の理解のために日本語訳を行ったIntel TBB フローグラフ解説記事。 Intel® Threading Building …

(翻訳)Intel Threading Building Blocks フローグラフを用いた特徴検出の例

元記事:A feature-detection example using the Intel® Threading Building Blocks flow graph | Intel® Software, Michael Voss氏, 2011/9/9自分自身の理解のために日本語訳を行ったIntel TBB フローグラフ解説記事。 Intel® Threading Building Blocks フ…

(翻訳)Intel Threading Building Blocks フローグラフがフルサポートされます

元記事:The Intel® Threading Building Blocks flow graph is now fully supported | Intel® Software, Michael Voss氏, 2011/9/8自分自身の理解のために日本語訳を行ったIntel TBB フローグラフの紹介記事。 Intel® Threading Building Blocks フローグラフ…

minmaxアルゴリズム

C++11標準ライブラリに新しく追加されたアルゴリズムstd::minmax, std::minmax_elementについてメモ。名前の通り、最小値/最大値を一括して求めるアルゴリズム。(以下、引数に Comparator を取るオーバーロードは省略) // 25.4.7, minimum and maximum: te…

iotaアルゴリズム

C++11標準ライブラリに新しく追加されたアルゴリズムstd::iotaについてメモ。 シーケンス要素へ昇順で連続値を代入するアルゴリズム。 最初はitoaかと思い「なぜに今更?標準化したの?」 ギリシャ文字の ι/イオタ から来ているらしい。江添さんの本の虫 が…

C++11ラムダ式のパラメータ宣言部は省略可能

C++

タイトル通り。下記コードの(1), (2), (3)は等価。 [](){ /*...*/ } // (1) []{ /*...*/ } // (2) []() -> void { /*...*/ } // (3) [] -> void { /*...*/ } // ill-formed ただし、(1)および(2)で戻り値型がvoidに推論されるのは、ラムダ式の本体部が{ retu…

C++11 Concurrency Series ビデオチュートリアル

C++

id:faith_and_braveさんとこ経由で知った、C++11並行プログラミングのビデオチュートリアル集。コーディング&動作を示しながら解説が進むため、順を追って理解しやすい。(英語スピーキング速度もゆっくり目) C++11 Concurrency Series Part 1: Fork/Join…

windows.hのmin/maxマクロ回避策4パターン

Microsoft Windowsプラットフォームのヘッダファイル windows.h は悪名高いmin, maxマクロを定義するため、プリプロセス時に意図せずminやmaxが置換されてしまい、妙なコンパイルエラーを引き起こす場合がある。一例としてMSVC10で下記コードをコンパイルす…

asmキーワードの扱いの違い

C C++

C言語とC++言語とでは、それぞれの標準規格におけるasmキーワードの扱いが異なることに気付いたのでメモ。結論を要約すると下記の通り。 Cでは予約語では無い。ただし、多くのシステムでは処理系定義であると言及。(informative) C++では予約語であり、その…

Intel TBB 4.0のC++11対応状況

Intel TBB(Threading Building Blocks) 4.0では、C++11で追加された新機能との親和性向上や、新しいC++標準ライブラリ互換APIの提供が行われている。 C++11標準ライブラリ互換APIの提供 TBB 4.0ではC++11標準ライブラリとの前方互換性のために、新しく追加さ…

vector要素アクセスとスレッド安全性

C++

前記事のサンプルコード(下記)を書いた時に、“複数スレッドから同じstd::vector<T>上の異なる要素へ同時アクセス” のスレッド安全性が気になったのでメモ。 #include <vector> #include "tbb/compat/ppl.h" std::vector<int> data = /*...*/; // 全ての要素値を2倍する Con</int></vector></t>…

Intel Threading Building BlocksとMicrosoft Parallel Pattern Libraryの互換性

Intel TBB(Threading Building Blocks)とMicrosoft PPL(Parallel Pattern Library)は、両ライブラリともに同じような並列アルゴリズムや同期プリミティブを提供している。TBB バージョン2.2以降、一部機能についてはPPLとのAPI互換がとられている。(TBB 4.0…

C++言語の標準規格一覧

C++

プログラミング言語C++に関する標準規格の一覧。 略称 国際標準規格 対応するJIS規格 C++98 ISO/IEC 14882:1998 Programming languages -- C++ (なし) C++03 ISO/IEC 14882:2003 Programming languages -- C++ JIS X 3014:2003 プログラム言語 C++ TR1 ISO…

C言語の標準規格一覧

C

プログラミング言語Cに関する標準規格の一覧。 略称 国際標準規格 対応するJIS規格 C89 (ANSI X3.159-1989) C90と同一 C90 ISO/IEC 9899:1990 Programming languages -- C JIS X3010:1993 プログラミング言語C C95 ISO/IEC 9899:1990/Amd.1:1995 JIS X 3010:…