C言語なら俺に聞け(入門篇) Part 13
■ このスレッドは過去ログ倉庫に格納されています
0431デフォルトの名無しさん
2007/05/27(日) 17:18:48デッドロックっていうのは、2つのプロセスorスレッド(それぞれをP(A), P(B)とする)が
ある資源(変数でもいいし、ファイルとかでもいい。R(A), R(B)とする)を互いに取り合って止まる状態
具体的には、P(A)・P(B)は両方ともR(A), R(B)を必要とし、かつ両方の資源を排他的かつ同時に利用できないとダメだとする
ここでP(A)がR(A)を、P(B)がR(B)を排他利用出来る状態になったとする。
すると処理を完了するためにP(A)はR(B)を、P(B)はR(A)をそれぞれ要求する訳だけど
それは既に相手に排他利用されているので確保できず、解放されるのを待つしかなくなる
しかし両方ともそれをやり始めるので結局いつまで経っても終わらずそこでストップ
これがデッドロック。並列処理で他にも問題になるものにスタベーションってのもあるがそれは全くの別物
あと、strtok()はmanpageにも書かれているようにスレッドセーフではないから
基本的にマルチスレッドで使うと変な挙動をする
排他制御でどうこうするより大人しくReentrant版を使うのが吉
■ このスレッドは過去ログ倉庫に格納されています