2014-01-01から1年間の記事一覧
Java 8で導入されたStream APIの並列ストリーム処理において、実行するスレッドプールを明示指定する方法。Stream APIの既定動作では ForkJoinPoolの共通スレッドプール を利用する。*1 import static java.util.stream.IntStream.range; // 一般に論理プロ…
Java 8で追加された java.util.concurrent.locks.StampedLock 同期プリミティブについてメモ。まとめ: StampedLockクラスは、「楽観的(optimistic)Read操作」および「ロック昇格(upgrade lock)」を追加サポートしたReader-Writerロックとして機能する。 注…
Intel TBB(Threading Building Blocks)を利用した並列パイプライン処理実装のひな形コード。下記の前提条件・要件に適合する。 データの “入力 → 変換 → 出力” 処理フローにおいて、スループット改善を目的として変換処理を並列化する。 データ変換は並行実…
C++標準ライブラリの文字列型std::string*1 とリテラル0を用いた初期化に関するメモ。 2021-07-02追記:C++2b(C++23)に向けてP2166R1が採択され、nullptr_tを取るstd::string/std::string_viewコンストラクタはdelete宣言される。この仕様追加によって本記…
元文書:N3710: Specifying the absence of "out of thin air" results (LWG2265), Hans-J. Boehm氏, 2013/08/29訳出メモ: 自分自身の理解のために日本語訳を行ったC++メモリモデルから"out of thin air"を禁止する提案文書。(後半) 訳文中では"out of th…
元文書:N3710: Specifying the absence of "out of thin air" results (LWG2265), Hans-J. Boehm氏, 2013/08/29訳出メモ: 自分自身の理解のために日本語訳を行ったC++メモリモデルから "out of thin air" を禁止する提案文書。(前半) 訳文中では "out of…
Java 8で導入されたラムダ式またはメソッド参照と、Java 7以降のtry-with-resources構文を組合せて、任意のオブジェクトに対するスコープガード処理を記述する方法。 // Java 7以降 class X implements AutoCloseable { // AutoCloseable#closeを実装したク…
Java 8で導入された java.io.UncheckedIOException 例外クラスについてメモ。Stream処理における “Exception Tunneling” のために追加された例外。UncheckedIOException例外クラスは、従来からある検査例外java.io.IOExceptionをラップする目的で、RuntimeEx…
Java 8で新たに導入されたメソッド参照(method reference)についてメモ。メソッド参照は下記の4種類に分類される。 [a] staticメソッドへの参照 [b] 特定オブジェクトのインスタンスメソッドへの参照 [c] 同一クラス任意オブジェクトのインスタンスメソッド…
C言語プログラム上で高機密性情報(パスワード文字列など)を消去するケースで、memset関数の単純利用では機密情報がメモリ上に残存してしまい、セキュリティ上の脆弱性につながる可能性がある。 void secure_operation() { // パスワード文字列を取得 char …
async関数launch::asyncポリシーとfutureのちょっと特殊な動作, 同(続き)の続き。 async関数動作でlaunch::asyncポリシーが選択された場合のみ、futureオブジェクトのデストラクタではasync関数が作成した新スレッド完了を待機する。(暗黙的にスレッドjoi…
C++14ではヌルポインタ定数の定義における値0の扱いが微妙に変更される。CWG defect #903の適用。 C++11以前:値0に評価される整数型の定数式(=計算結果が0) C++14:値0の整数リテラル(=コード上で0を明記) 下記コードにおいて、C++11以前ではg<0>のみ…
本文こちら→Boost.勉強会 #14に参加しました - yohhoyの日記(別館)スライド資料:http://www.slideshare.net/yohhoy/boostjp14-parfor-20140301-31781446
Java 7で追加された java.util.concurrent.Phaser*1 同期プリミティブについてメモ。Phaser(フェイザー)クラスは、Java 1.5からあるCountDownLatchやCyclicBarrierを機能的に包含し、さらに汎用化したスレッド同期プリミティブである。CountDownLatch, Cyc…
OpenMP 3.0以降が提供するロック操作関数では、ロック所有権はスレッドではなく “タスクにより所有” される。一方で、ベース言語が提供するロック操作*1ではロック所有権が “スレッドにより所有” されるため、OpenMPロック操作関数の代替とできないユースケ…
C/C++言語 volatile修飾とOpenMP flush操作の関係についてメモ。要約: OpenMP 2.5以前:volatile変数への読込/書込アクセスは、それぞれ暗黙のOpenMP flush操作を伴う。 OpenMP 3.0以降:volatile変数アクセスはOpenMPメモリモデル(≒Memory Consistency)に…
タイトル通り。OpenMP flush指示文のみ利用では、データ競合(data race)を回避できない。また、OpenMP仕様ではデータ競合発生時の動作を規定せず(unspecified)、ベース言語*1および動作システムの仕様に準じる。OpenMP API Version 4.0仕様*2 1.4 Memory Mod…
OpenMP API仕様バージョンと、C/C++言語向けatomicコンストラクトの制限事項についてメモ。 OpenMP 3.0以前 #pragma omp atomic new-line expression-stmt atomic指示文に続く式 expression-stmt では、スカラ型の左辺値(lvalue)式 x に対する更新操作のみが…
Java標準ライブラリで提供されるThread.destoryメソッドについて。これまで一度も実装されることなく非推奨(deprecated)となった。常にNoSuchMethodErrorエラーを送出する。 @Deprecated public void destroy()Deprecated. This method was originally desig…
C++11で導入されたUniform Initializationと参照型変数に関するメモ。C++11(N3337)言語仕様の問題としてCWG defect #1288で挙げられ、C++14 Draft N3376にてWording修正が適用された。*1 struct S {}; int main() { S v; S & r{ v }; // ?? } gcc gcc 4.8.2…