pthread errnoとpthreadライブラリ関数の戻り値

提供: C言語入門
移動: 案内検索
スポンサーリンク

マルチスレッドライブラリ pthreadライブラリのほとんどのpthread関数は、成功すると0を返し、失敗した場合は、エラー番号を返します。pthread関数は、errnoをセットしません(ごく一部はセットしているようですが)。

概要

マルチスレッドで大域変数errnoを使用していたら、誰(どのスレッド)のエラーだかわからなくなりそうですが。

pthread関数の戻り値とerrno
関数 戻り値 errno
pthread_create エラー番号 セットされた
pthread_join エラー番号 セットされない
pthread_mutex_lock エラー番号 セットされない

pthread_create

不思議なことに pthread_create は、エラー番号を返しつつ、errno にも値を設定してくれました。 pthread_create でスレッドを大量に作り、リソースが足りなくなって、pthread_createが失敗するコードを実行すると以下のようになりました。

pthread_createでスレッドの大量作成
- エラー番号 エラーメッセージ
errno 67 Too many processes
return value 35 Resource temporarily unavailable

pthread_join

同じスレッドIDでpthread_joinを2回した場合は、以下の値になります。

  • pthread_joinは、2を返す。
  • No such process

pthread_mutex_lock

同じmutexに、pthread_mutex_lockを2回した場合は、以下の値になります。

  • pthread_mutex_lockは、11を返す。
  • Resource deadlock avoided

関連項目




スポンサーリンク