我目前正在开展一个项目,要求我同时运行两个进程(P1和P2)。 P1和P2都有多个线程在运行。所有这些线程都应该能够写入一个互斥锁保护的日志文件。
到目前为止我所拥有的: FILE *是P1中的全局变量,我使用互斥锁来保护它免受多个尝试写入它的线程的影响。这似乎工作正常。
现在我想知道如何从P2获取线程以写入同一个日志文件,同时保护它免受同时写入尝试(来自P1和P2)。我可能在这方面确实是错的,但我认为如果我在声明日志文件指针和互斥锁之后只是分叉,P1中的互斥锁将只保护P1中的线程的多次写入尝试,并且P2中的互斥锁将仅保护P2中的线程进行多次写入尝试。 有一个简单的方法来解决这个问题吗?如果有人可以帮我解决这个问题,我会很高兴,我一直在尝试很多事情,但没有成功。
编辑:我不知道SHARED INTER-PROCESS MUTEX。当我有工作的时候,我会把我的代码放好。乔
答案 0 :(得分:0)
正如人们评论的那样,您可以使用进程共享的互斥锁。在Unix / Linux上,涉及创建一个包含该互斥锁并在两个进程中映射它的共享内存。
在Linux上,您可以依赖于阻塞write()
系统调用文件是原子的这一事实。也就是说,您可以将多个进程登录到同一个文件中,只要它们将完整的行传递到write()
,文件中的行就不会被破坏。 POSIX对文件不需要这样的原子性,但是,我记得读过Linus Torvalds的一篇评论说,一个不支持这个的文件系统对Linux来说效果不好。