タグ

threadとyohhoyに関するUSAGI-WRPのブックマーク (3)

  • C11/C++11/POSIXスレッドAPI比較 - yohhoyの日記

    C11標準ライブラリ、C++11標準ライブラリ、POSIXスレッドのスレッドライブラリ(Pthreads) API比較。 各スレッドライブラリAPIを、“スレッド”、“CallOnce”、“排他制御(mutex)”、“条件変数(condition variable)”、“TLS(Thread Local Storage)”、その他機能に分類して比較する。表記簡略化のためC++11標準ライブラリは名前空間stdを省略している。 概略: C11はISO/IEC JTC1/SC22/WG14 N1570、C++11はISO/IEC JTC1/SC22/WG21 N3337、POSIXはIEEE Std 1003.1-2008に基づく。 C11標準ライブラリとPOSIXスレッドライブラリのAPI体系はほぼ同一。*1 C++11標準ライブラリはC11標準ライブラリ提供のスレッドサポート機能を包含し、

    C11/C++11/POSIXスレッドAPI比較 - yohhoyの日記
  • 条件変数とダンス(Two-Step Dance)を - yohhoyの日記

    条件変数(condition variable)同期プリミティブに対する待機/通知で発生する現象と回避策のメモ。 条件変数とミューテックスを使ったコードにおいて次のような現象が生じる。 スレッドAが条件変数cvに対して通知を行う。 条件変数cvに対してブロックされていたスレッドBのブロックが解除される。ただし、ミューテックスmtxはスレッドAにロック保持されたままのため、再びスレッドBはミューテックスmtxに対してブロックされる*1。 スレッドAがミューテックスmtxのロックを解放する。 ミューテックスmtxに対してブロックされていたスレッドBがブロック解除され、同ミューテックスのロック獲得に成功する。 #include <pthread.h> int data = 0; // 待機条件: 非0になるまで待機 pthread_mutex_t mtx; pthread_cond_t cv;

    条件変数とダンス(Two-Step Dance)を - yohhoyの日記
  • C++スレッド遅延開始の実装5パターン - yohhoyの日記(別館)

    局所的に「スレッド開始を遅延させる」ネタが盛り上がっていたので、C++とBoostライブラリを用いた色々な実装方法をまとめてみました。 この記事で対象とするのは、下記コードにある2つの要件を満たす実装方法です。 (1) スレッドを管理するオブジェクトXのコンストラクト時ではなく、その後の任意タイミングで新スレッド処理を開始する。 (2) オブジェクトXのデストラクト時に、上記(1)の別スレッドがまだ実行中ならそのスレッド処理完了を待機する。 class X { // threadオブジェクトを保持するメンバ変数 void do_() { /* 別スレッド処理 */ } public: ~X() { // (2) 別スレッドがまだ実行中なら完了を待機する } void start() { // (1) 新しいスレッドを開始して関数do_を実行する } }; int main() { X x;

    C++スレッド遅延開始の実装5パターン - yohhoyの日記(別館)
  • 1