「pthread errnoとpthreadライブラリ関数の戻り値」の版間の差分

提供: C言語入門
移動: 案内検索
(ページの作成:「マルチスレッドライブラリ pthreadライブラリのほとんどのpthread関数は、成功すると0を返し、失敗した場合は、エラー番号を...」)
 
(相違点なし)

2014年5月11日 (日) 16:25時点における最新版

マルチスレッドライブラリ 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

関連項目