[解決済み】 errnoはスレッドセーフですか?
質問
で
errno.h
として宣言されています。
extern int errno;
ということで、質問なんですが
errno
の値は、マルチスレッドコードで、いくつかの呼び出しの後、または perror() を使用します。これはスレッドセーフな変数なのでしょうか?そうでない場合、代替案は何ですか?
私は、x86アーキテクチャでgccとLinuxを使用しています。
解決方法を教えてください。
はい、スレッドセーフです。 Linuxでは、グローバル変数errnoはスレッド固有です。 POSIXでは、errnoはスレッドセーフであることが要求されています。
参照 http://www.unix.org/whitepapers/reentrant.html
POSIX.1では、errnoは次のように定義されています。 外部グローバル変数 しかし、この の定義が受け入れられません。 マルチスレッド環境では を使用すると、非決定的な の結果が得られます。問題は、2つ以上の のスレッドでエラーが発生し、そのすべてのスレッドで 同じ errno が設定されるようにする。 このような状況下で、あるスレッド の後に errno をチェックすることになるかもしれません。 によってすでに更新されている スレッドになります。
この結果生じる 非決定性、POSIX.1cでは errno は スレッドごとのエラー番号は次のとおりです。 (iso/iec 9945:1-1996, §2.4)。
関数によっては、エラー番号をアクセスする変数で提供するものもあります。 シンボルerrnoを通して シンボル errno は ヘッダで指定されています。 C 言語標準 ... あるスレッドの各スレッドに対して プロセスでは,errnoの値は 関数呼び出しの影響を受けるか 他のスレッドから errno に代入される。
以下もご参照ください。 http://linux.die.net/man/3/errno
errnoはスレッドローカルです。あるスレッドで設定しても、他のスレッドでの値には影響しません。
関連
-
[解決済み】Android "ビュー階層を作成した元のスレッドだけが、そのビューに触れることができる"
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
error: 'for' loop initial declaration is only allowed in C99 mode 原因と解決方法
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] C言語でオブジェクト指向のコードを書くとしたら、どのようにすればよいのでしょうか?[クローズド]
-
[解決済み] C言語で "unsigned long "をprintfする方法は?
-
[解決済み] なぜvolatileはマルチスレッドのCやC++のプログラミングで有用ではないと考えられているのですか?
-
[解決済み] != チェックスレッドは安全か?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[C] レポートエラー 代入の左オペランドとしてlvalueが必要
-
C++の配列コピー
-
ポインタ定数および定数ポインタ
-
error: 'for' loop initial declaration is only allowed in C99 mode 原因と解決方法
-
C/C++の再定義
-
C: 1を求める! + 2! + 3! + ... + n! (ループ)
-
[解決済み] Linux Socket write() によるBad File Descriptor C
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C言語標準に準拠した構造体の初期化方法
-
[解決済み] LD_PRELOADのトリックとは何ですか?