-1

我目前正在做一个需要我同时运行两个进程(P1 和 P2)的项目。P1 和 P2 都有多个线程在运行。所有这些线程都应该能够写入一个受互斥锁保护的日志文件。

到目前为止我所拥有的: FILE* 是 P1 中的一个全局变量,我使用互斥锁来保护它免受多个线程试图写入它的影响。这似乎工作正常。

现在我想知道如何让 P2 中的线程写入同一个日志文件,同时保护它免受同时写入尝试(来自 P1 和 P2)。我可能真的错了,但我认为如果我只是在声明日志文件指针和互斥锁后分叉,P1 中的互斥锁只会保护 P1 中线程的多次写入尝试,而 P2 中的互斥锁只会保护来自 P2 中的线程的多次写入尝试。有没有简单的方法来解决这个问题?如果有人可以帮助我解决这个问题,我会非常高兴,我一直在尝试很多很多事情,但都没有成功。

编辑:我不知道 SHARED INTER-PROCESS MUTEX。当我有工作时,我会放上我的代码。

4

1 回答 1

0

正如人们评论的那样,您可以使用进程共享互斥锁。在 Unix/Linux 上,这涉及创建一块包含该互斥体的共享内存并将其映射到两个进程中。

不过,在 Linux 上,您可以依赖这样一个事实,即对write()文件的阻塞系统调用是原子的。也就是说,您可以让多个进程登录到同一个文件,只要它们将完整的行传递到write()行中就不会在文件中损坏。POSIX 不需要文件的这种原子性,但是,我记得读过 Linus Torvalds 的评论,说不支持这种原子性的文件系统不适用于 Linux。

于 2013-08-07T16:34:18.970 回答