2004-06-18から1日間の記事一覧

マルチスレッドと共有変数 (続き) -- 補足 (3)

C++

シグナルハンドラからアクセスするグローバル変数は、ちゃんと volatile sig_atomic_t 型にしないとダメですよ!(追記 2006/1/20) またも書き忘れ。longjmp, _longjmp, siglongjmpで戻ってきた後に触りたい自動変数もvolatileつけないとだめですYO!

マルチスレッドと共有変数 (続き) -- 補足 (2)

C++

Singletonを実装する時などで、いわゆる "double checked locking" を使うなんて場合は、memory sync な関数を使わない部分が出てくるでしょうから、volatile やら コンパイラ固有のメモリバリア手法やらをキッチリ使わないとダメですよ〜。多分。 参考: The…

マルチスレッドと共有変数 (続き) -- 補足 (1)

C++

SUSv3をひっぱりだすのが大げさという場合は、comp.programming.threads FAQ の、 Q.56: Why don't I need to declare shared variables VOLATILE? Q.118: Memory barriers for synchonization あたりを読んでもらうと良いです。特にQ.56ですね。 あと、以上…

マルチスレッドと共有変数 (続き) -- およびvolatile修飾の必要性

C++

複数のスレッドで変数を共有し、さらにその変数に対してread/writeの両方のオペレーションが行われるとき、その変数の操作は、上で書いたとおり、 read/writeともにmutexで保護するべき volatile修飾だけで済ませるのはNG mutexで保護するならvolatile修飾は…

マルチスレッドと共有変数 - volatile?なにそれ。

C++

複数のスレッドから共有する変数(典型的にはグローバル変数)を操作する際、どんな注意事項があるか?という話題です。プラットフォームはPOSIXを仮定します。pthreadのお話です。 まず、一口に「複数のスレッドで変数を共有」といっても、おおまかにいって次…