我在 MacOSX 上。 我正在编写一个多线程程序。 一个线程进行日志记录。 非日志线程可能随时崩溃。
我应该在记录器中采用什么约定/我可以有什么保证?
我更喜欢这样一种解决方案,即使我在部分写入过程中崩溃,之前的写入仍然会转到磁盘,并且在回读日志时,我可以弄清楚“啊,我写了 100 个完整的实体,然后我崩溃了第 101 个。
谢谢!
最佳答案
我在 Linux 上编程,而不是 MacOSX,但那里可能是一样的。
如果你的程序日志中只有一个线程,这意味着你在这个日志线程中缓冲日志数据,然后它把它写入一个文件可能是一个更大的部分以避免太多的 I/O 操作并使日志过程更快.
不好的是,如果一个线程出现段错误,整个进程连同缓冲数据一起被销毁。
我知道的解决方案(适用于 Linux)是:
通过套接字传输日志数据,而不使用缓冲日志线程(例如 syslog)。在这种情况下,操作系统可能会处理写入套接字的数据,即使您的应用程序崩溃,数据也应该在另一端接收并成功记录。
Don 使用日志记录线程,每个线程都可以同步记录到文件中。在这种情况下,崩溃后日志数据的损失应该很小或没有。虽然速度较慢。
我还不知道这个问题的更好解决方案,不过学习一些会很有趣。
关于c++ - 在 MacOSX 上,在 C++ 程序中,我对文件 IO 有什么保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2431434/