gpt4 book ai didi

C - printf() 是否会导致线程休眠?

转载 作者:行者123 更新时间:2023-11-30 20:31:26 24 4
gpt4 key购买 nike

当程序进行 I/O 时,我的理解是线程会短暂休眠然后恢复(例如写入文件时)。我的问题是,当我们使用 printf() 进行打印时,C 程序线程是否会以任何方式休眠?

最佳答案

既然您特别要求 printf() ,我假设您的意思是以最通用的方式,它将填充合理大小的缓冲区并调用系统调用 write(2)stdout 并且 stdout 恰好指向您的终端。

在大多数操作系统中,当您调用某些系统调用时,调用线程/进程将从 CPU 可运行列表中删除并放置在单独的等待列表中。对于所有 I/O 调用(例如读/写等)都是如此。由于 I/O 而暂时从处理中移除与通过计时器进入休眠状态不同。

例如,在 Linux 中,专门用于 I/O 等待的线程/进程有不可中断的 sleep 状态,而等待计时器和事件的线程/进程则有可中断的 sleep 状态。虽然,从愚蠢用户的角度来看,它们似乎都是相同的,但它们在幕后的实现却截然不同。

要回答您的问题,请调用 printf()并不完全是 sleep 状态,而是等待缓冲区刷新到设备而不是真正处于 sleep 状态。即使如此,还有一些其他的怪癖,您可以在signal(7)中阅读有关它的内容。以及更多关于 Marek's 中的各种进程/线程状态的信息博客。

希望这有帮助。

关于C - printf() 是否会导致线程休眠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51014130/

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