我正在尝试学习多线程,我有一个简单的问题。在我发现的大多数示例中,标准输出缓冲区在允许多个线程使用它之前关闭:
函数setbuf(标准输出,NULL);
为什么呢?如果我删除那行代码,代码打印相同!
答案 0 :(得分:4)
它们可能不会打印出来 - 当输出被缓冲时,它可能不会立即显示,这可能会改变线程在线程之间输出的顺序。
关闭缓冲可确保您知道语句的执行顺序。
答案 1 :(得分:2)
它可以防止缓冲,这意味着您可以更好地了解各种线程何时执行了哪些操作。也就是说,当stdout
发生时,您更有可能看到对stdout
的写入,而不是在将{{1}}写入一些数据之后。
当您将控制台应用程序的输出传递给UI时,这也很有帮助。