假设我有两个线程将某些内容(相对较长)打印到 stderr
或 stdout
,这两个流的函数是线程安全的,因为它们永远不会“交错”字符?因此,例如,如果我有“Hello, World”,我将永远不会得到“HHellllo,, WorldWorld”或任何其他交错?这适用于 x86、GCC、Linux > 3.0。
最佳答案
我看了一下 glibc,每次调用 vfprintf
都会调用 POSIX flockfile
(_IO_flockfile
) 和 funlockfile
(_IO_funlockfile
) 在流上。
因此,调用中的字符不会与来自另一个线程的调用中的字符交错,因为只有一个线程可以持有 stdout
或 stderr
上的锁。
不过,关于跨多个线程的多个调用的顺序,所有的赌注都落空了。
关于c - 对 `fprintf(stdout, ...)` 和 `fprintf(stderr, ...)` 的调用是否保证不会与多个线程交错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12988946/