我有一个服务器C应用程序,它使用write(2)以同步模式写入日志,但由于这个原因,它有时会阻塞100-400毫秒(有时更多),因为服务器计算机上的IO负载非常高
我想将日志写入进程地址空间中mmap-ed的POSIX共享内存区域。在这种情况下,另一个进程只读取该POSIX共享内存并写入磁盘。这样,如果进程崩溃,日志信息不会丢失,唯一的问题是电源故障。
将POSIX信号量或POSIX RW锁定放在共享内存(因此在mmap-ed区域内)以便在writer和reader之间进行同步是安全的吗?在这种情况下,有什么特别的事情需要考虑吗?
答案 0 :(得分:1)
你当然可以重新发明轮子,但你可能想考虑使用syslog [1]。但是,如果您确定自己 - 以自己的方式做事,则可能需要考虑使用mqueues [2]或将命名信号[3]与共享内存结合使用。
[1] http://www.gnu.org/software/libc/manual/html_node/Syslog.html#Syslog
[2]男子7 mq_overview
[3]男人7 sem_overview