- 198 名前:はちみつ餃子 mailto:sage [2023/06/06(火) 08:43:39.37 ID:TmtPJsyo0.net]
- >>193
errno は C11 以降は thread local storage ということになってる。 errno をセットした後に別のスレッドによって内容が書き換えられるということはない。 (やろうとすれば出来なくはないが……。 普通に使ってて間違ってやってしまうということはないだろう。) C99 でも errno は変更可能な左辺値 (に展開されるマクロ) であることは要求されているが それが関数呼出しによって得られるものであってもかまわないという記述もあり、 スレッドまわりで問題を起こさないようにする処理はその関数に入れることが出来る。 C99 ではスレッドローカルの概念は提供していないが事実上はスレッドローカル的な 実装に出来るように配慮されてる。 errno が不格好な設計であるのは確かだが、マルチスレッドでは問題にはならない。
|

|