c - 对 `fprintf(stdout, ...)` 和 `fprintf(stderr, ...)` 的调用是否保证不会与多个线程交错?

标签 c linux multithreading concurrency multicore

假设我有两个线程将某些内容(相对较长)打印到 stderrstdout,这两个流的函数是线程安全的,因为它们永远不会“交错”字符?因此,例如,如果我有“Hello, World”,我将永远不会得到“HHellllo,, WorldWorld”或任何其他交错?这适用于 x86、GCC、Linux > 3.0。

最佳答案

我看了一下 glibc,每次调用 vfprintf 都会调用 POSIX flockfile (_IO_flockfile) 和 funlockfile (_IO_funlockfile) 在流上。

因此,调用中的字符不会与来自另一个线程的调用中的字符交错,因为只有一个线程可以持有 stdoutstderr 上的锁。

不过,关于跨多个线程的多个调用的顺序,所有的赌注都落空了。

关于c - 对 `fprintf(stdout, ...)` 和 `fprintf(stderr, ...)` 的调用是否保证不会与多个线程交错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12988946/

相关文章:

c - C 中的 free() 函数对我不起作用

linux - 原始 makefile 编译失败

linux - 在 linux 内核中读取和写入文件

java - 为什么 CopyOnWriteArrayList 是安全的?

java - 我怎样才能让interrupt()工作?

java - 获取所有以指定Runnable运行的线程

c++ - 在 Linux 上用 C/C++ 编程网络摄像头平移/倾斜/缩放功能?

c++ - 用于测试 C/C++ 语法的示例

c - 减去循环元素

linux - 交叉编译内核模块 : how to set configs right