2

stderrまたはに何か (比較的長い) を出力する 2 つのスレッドがあるとします。stdoutこれらの両方のストリームへの関数は、文字を「インターリーブ」しないという意味でスレッドセーフですか? たとえば、「He​​llo, World」がある場合、「HHellllo,, WorldWorld」またはその他のインターリーブは得られませんか? これは、x86、GCC、Linux > 3.0 用です。

4

2 に答える 2

4

glibcを調べたところ、を呼び出すたびに、ストリーム上vfprintfのPOSIX flockfile_IO_flockfile)とfunlockfile( )が呼び出されます。_IO_funlockfile

したがって、1つのスレッドのみがロックを保持できるため、呼び出し内の文字が別のスレッドからの呼び出しからの文字とインターリーブされることはありませstdoutstderr

ただし、さまざまなスレッドでの複数の呼び出しの順序については、すべての賭けが無効になっています。

于 2012-10-20T14:37:03.710 に答える