我有一个包含许多工作线程的C应用程序.至关重要的是,这些不会阻塞工作线程需要写入磁盘上的文件,我让它们写入内存中的循环缓冲区,然后有一个专用线程将该缓冲区写入磁盘.
工作线程不再阻塞.专用线程可以在写入磁盘时安全地阻塞,而不会影响工作线程(写入磁盘时它不会保持锁定).我的内存缓冲区调整得足够大,以至于编写器线程可以跟上.
一切都很好.我的问题是,我如何为stdout实现类似的东西?
我可以宏printf()写入内存缓冲区,但我无法控制可能写入stdout的所有代码(其中一些代码在第三方库中).
思考?NickB
fwrite()在将要写入磁盘的数据移交给操作系统后,该函数是否返回,或者仅在数据实际物理写入磁盘后才返回?
对于我的情况,我希望这是第一种情况,因为我不想等到所有数据都被物理写入磁盘.我希望另一个操作系统线程在后台传输它.
在这种特殊情况下,我对Windows 10的行为感到好奇.
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fwrite