Der*_*unk 3 c linux concurrency multithreading multicore
假设我有两个线程将某些内容(相对较长)打印到 或stderr,stdout这两个流的函数是否都是线程安全的,因为它们永远不会“交错”字符?因此,例如,如果我有“Hello, World”,我将永远不会得到“HHellllo,, WorldWorld”或其他任何交错?适用于 x86、GCC、Linux > 3.0。
我看了一下 glibc,每次调用都会调用流上的vfprintfPOSIX flockfile( _IO_flockfile) 和funlockfile( ) 。_IO_funlockfile
因此,调用中的字符不会与另一个线程调用中的字符交错,因为只有一个线程可以持有stdout或 的锁stderr。
不过,对于跨不同线程的多个调用的顺序,所有的赌注都是不成立的。