std::thread を使用したソースを -pthread オプションを付けずにビルドすると、ビルドエラーにならずに実行時エラーになる仕組みが気になったので調べてみました。 パスやら何やらは x86-64 版の Gentoo Linux のものです。他ディストリビューションでは微妙に異なるかもしれません。 -pthread オプション g++ や clang++ で C++11 以降に実装された std::thread を使おうとすると、オプション -pthread が必要です。これを忘れると、スレッドを実行しようとした時点で例外が発生してしまいます。 #include <iostream> #include <thread> void func() { std::cout << "Hello!" << std::endl; } int main() { std::thread(func
サーバサイドの大規模計算・組み込み系・ゲームプログラミングなどの分野ではしばしば高速化を求められることがある。 その中でも、スレッド並列に関する高速化はマルチコア化の波で近年特に求められている。 この記事ではスレッド並列にOpenMPを利用した高速化手法についての基本的な部分を紹介していく。 *言葉の解釈によっては適切でない部分や、OpenMPの正しい使い方から外れた部分があるかもしれません。 *2017.02.16 記事の一部に書き途中・適切ではない記載があったので更新しました。 スレッド並列化とは? スレッド並列化とは、近年のPCによく使われているマルチコアのCPU上で行われる並列化のことである。CPUによっても変わるが、主流のIntel社製Core iシリーズのCPUなどでは1コアで2スレッドまでのスレッドを持つことができる。 例に、2016年の新モデルMacBookProの13イン
2. 今日は何の話? libc でもっとも良く使われる関数、 malloc と free の実装の解説 もっと一般的に言うと、プロセスのアドレス空間のうち、 heap 領域とよばれる、場所を操作する関数の説明 解説というと聞こえはいいが、そんな大層なものじゃない 3. Linux での process address space model kernel stack text mmap data bss heap 矢印はデータ量の増加と ともに、伸びる方向 使用中 使用中 使用中 今日は、ここ、 heap と呼ばれる領域のお話 low high free free free 4. 古典的 malloc プログラミング言語 C (いわゆる K&R) で紹介された初期の Unix の malloc 実装 使用中 使用中 使用中 free listの head 使用中 ・ free list を
「ワッチョイ」とは 強制コテハンのスレッド で名前の後ろに追加される 妙なニックネーム の一つです。それ以外にも様々な文字列が追加されます。それぞれに(1)~(5)まで番号を振りましたので説明します。 (1) 「ワッチョイ」とは使用しているインターネット回線で決められる 妙なニックネーム の一つです。 他にも「スプー」「ササクッテロ」「アウアウ」「オッペケ」「ガラプー」などがあります。 ちなみに「ワッチョイ」は固定回線からの書き込みです。 「スプー」はドコモのスマホ回線からの書き込みです。「スプッ」「スプッッ」などIPアドレスによって細分化されています。 「ササクッテロ」は主にソフトバンクのiPhoneでホスト名に「panda-world.ne.jp」を含む回線からの書き込みです。こちらも「ササクッテロラ」「ササクッテロリ」などIPアドレスによって細分化されています。 詳しく
Author: Blaise Barney, Lawrence Livermore National Laboratory, UCRL-MI-133316 Note: This tutorial is no longer supported. It remains for archival purposes. Table of Contents Abstract Pthreads Overview What is a Thread? What are Pthreads? Why Pthreads? Designing Threaded Programs The Pthreads API Compiling Threaded Programs Thread Management Creating and Terminating Threads Passing Arguments to Thr
ちょっと使うことがあったので、備忘録的にGCCの組込みアトミック命令の使い方についてまとめておきます。 前提知識 マルチスレッドプログラムにおいて、共有データを更新する際の定石は spin lock や mutex でデータを保護することです。 これらの道具は多くの場面において十分便利なのですが、例えば共有データが1個の int 変数のみであり、更に高頻度で更新が行われるといった場合にはやや同期のコストが高くついてしまいます。 そのような場合には、アトミック命令を用いることで同期オーバーヘッドを抑えることができます。 アトミック命令とは、複数のスレッドから実行されても、個々の命令が一つ一つ順番に適用されてゆくことが保証されている命令のことです。 (より正確には、個々の命令がとある順番で一つ一つ適用された時と同じ結果を得られることが保証されている命令のことです) 例えば、とある変数 X の値
●キャンセルとは pthread には、他のスレッド (あるいは自分自身でもよい --- 普通は pthread_exit しますが) の実行を終了するための手段としてキャンセルが用意されています。 キャンセルは pthread_cancel() 関数を呼び出すことによって 要求することができます。 この関数を呼び出すと、引数で指定されたスレッドに対してキャンセルを要求します。 pthread_cancel() 関数自体は次のようなシンプルな関数なので、 取り消したいスレッドの ID さえ分かれば苦もなく呼び出せます。 int pthread_cancel(pthread_t thread); なお、pthread_cancel() 関数は、対象スレッドに対してキャンセルの要求を出すと、 そのスレッドが終了したかどうかとは無関係に、すぐに戻ってきます。 もし、そのスレッドが確実に終了するま
シングルスレッドのコードでシグナルハンドラ中でforkし、子プロセスが非同期シグナルセーフな関数を呼んでデッドロックする実例です。 非同期シグナルセーフな関数として a() を用意しました。この関数は入り口でmutexをロック、中で10秒寝て、mutexをアンロックして戻ります。 #include <sys/types.h> #include <time.h> #include <unistd.h> #include <signal.h> #include <pthread.h> #include <stdio.h> void a(void) { static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; const struct timespec t = {10, 0}; printf("enter a(), pid = %d\n", ge
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く