yohhoyの日記

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

latch, barrier同期プリミティブ

C++1y(C++14)に向けて提案されている同期プリミティブについてメモ。N3600 C++ Latches and Barriers に基づく。

2019-09-11追記:C++2a(C++20)に向けて P1135R6 が採択され、C++標準ライブラリにstd::latchstd::barrierが追加される。https://github.com/yohhoy/yamc にてエミュレーション実装提供。

latchプリミティブ
Nスレッド間でのタスク終了待ちに利用する。機能的にはJava 5以降のCountDownLatchC# 4.0以降のCountdownEventが相当。
barrierプリミティブ
Nスレッド間での周期的な同期ポイントに利用する。Boost.Threadライブラリではbarrierクラスによって提供済み*1。機能的にはJava 5以降のCyclicBarrierC# 4.0以降のBarrierOpenMPbarrier指示文が相当。

メモ:N3600のlatchプリミティブはreset操作を提供しないため、インスタンスあたり1回しか機能しない。周期的スレッド間同期機構への誤った適用による不具合予防のためか。

関連URL

*1:内部実装はC++11標準ライブラリ同期プリミティブだけで実現可能。http://www.boost.org/doc/libs/1_53_0/boost/thread/barrier.hpp