mutex
if(mutex==true)lock(mutex)
のようなコードだと、テストとロックの間にほかのスレッドがmutexをとる可能性がわずかにある。 pthread_mutex_lock(&mutex) は特殊な実装でそれを回避している。
pthread idの比較
pthread_t型の比較にはpthread_equal関数を使う。==は処理系によって動かない。
IO
JavaはIOは排他になっているが、pthreadでは自分で排他にしないといけない
mutexの属性
mutexの属性の一つに、別プロセスのスレッドから見えるかどうか、という属性がある。プロセス間でのロックに使える。けど、ふつうは同期にはSystemVかposixのセマフォを使う。
状態変数
pthread_cond_t型
スレッドは状態変数を持てる。また、同じ状態変数を持っているほかのスレッドにシグナルを送信できる
送信関数はpthread_cond_signalか、broadcast
シグナルはひとつのスレッドを起こし、broadcastはすべて起こす。JavaのnotifyとnotifyAllみたいなもの?
起こされるのは、pthread_cond_waitで同じ状態変数で待っているスレッド
途中まで読んでみて
ちょっとサンプルの書き方が古いというか、Cの書き方なのが気になる。出版が古いし、pthread自体も古いからしかたがない。
ところで、サンプルコードがやたらとmallocして、しかもfreeしてない箇所があるのが気になる。非同期処理で何が難しくなるかというと、生成と削除だと思っていたので、そのあたりの扱いが雑なのが不満。後の賞で説明が入るのだろうか?
本当はもう読み終わっているはずだったがまだ読み終わらず
今回、本を読みながら記事用のメモをとる、という方式にしてみた。ただ読むより頭に入って良かったので、この本一冊分は同じ方法を試す予定。あまりに読むのが遅くなるなら考え直す。