【问题标题】:multiple processes, one mutex多个进程,一个互斥体
【发布时间】:2013-08-07 14:54:49
【问题描述】:

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

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

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

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

【问题讨论】:

  • 了解file locking
  • 或者使用共享的进程间互斥锁。
  • 谢谢。我不知道进程间互斥锁。我认为它们严格来说是进程内的。我会仔细看看的!谁能告诉我为什么我的问题被否决了?是不是因为我没有显示代码?谢谢

标签: c multithreading file-io multiprocessing mutex


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多