gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:38:50 36 4
gpt4 key购买 nike

假设我有两个线程将某些内容(相对较长)打印到 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/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com