栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Linux上的C中使用stdout线程安全吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Linux上的C中使用stdout线程安全吗?

它不是C标准指定的-取决于您对C标准库的实现。实际上,C标准甚至根本没有提到线程,因为某些系统(例如嵌入式系统)没有多线程。

在GNU实现(

glibc
)中,stdio中处理
FILE*
对象的大多数高级函数都是线程安全的。通常没有
unlocked
名字的(例如
getc_unlocked(3)
)。但是,线程安全性处于每个函数调用级别:
printf(3)
例如,如果您多次调用,则保证每个调用都是原子输出的,但是其他线程可能会在调用之间打印输出
printf()
。如果要确保自动输出一系列I
/
O调用,则可以在它们周围加上一
flockfile(3)/funlockfile(3)
对调用来锁定该
FILE
句柄。请注意,这些函数是可重入的,因此您可以安全地
printf()
在它们之间
printf()
进行调用,即使以为本身对进行了调用,也不会导致死锁
flockfile()


诸如此类的低级I / O调用

write(2)
应该是线程安全的,但我对此不是100%肯定的-
write()
使系统调用内核以执行I /
O。具体如何发生取决于您所使用的内核。它可能是该
sysenter
指令,也可能是
int
旧系统上的(中断)指令。一旦进入内核,就由内核来确定I /
O是线程安全的。在我刚刚对Darwin Kernel版本8.11.1进行的测试中,它
write(2)
似乎是线程安全的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399054.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号