如何在同一资源上同步两个进程访问?

问题描述:

我有访问相同的物理存储器(GPIO数据ADDR)两个处理。 那么我怎么能在这些应用程序之间进行同步? 我明白,我们有某种锁紧机构,如互斥和信号灯,所以这方法是最快的?如何在同一资源上同步两个进程访问?

感谢您的帮助,

〜NM

互斥和信号量通常被认为是在同一个地址空间并发的解决方案 - 这意味着同一程序的不同部分将锁定到他们的访问资源使用这些奇迹之一。

在处理单独的进程时,在Linux上执行此操作的标准方法是在/var/lock中创建一些内容,如/var/lock/myapp.lockplace your PID followed by a newline in it。然后其他进程将检查它的存在,如果你很狡猾检查PID以确保它仍然存在。

如果您需要将区域的实时访问,跳过的文件系统和流程都​​将通过IPC(LET_ME_KNOW_WHEN_DONEOKAY_IM_DONE,你的想法)进行通信,或者 - 更好 - 写一个过程,其唯一目的是读取和写入GPIO内存,以及其他程序与通过IPC(可能是最好的办法)进行通信。

+1

互斥体和信号量肯定可以用来交-处理。锁文件的方法将比任何一个都慢。 – ysth 2009-11-01 07:41:41

+0

尤其POSIX互斥体和条件变量对Linux的支持共享内存,以'pthread_mutexattr_setpshared'和朋友。这可能是Linux上开销最低的IPC机制。然而,正确使用它会更复杂一点。 – bdonlan 2009-11-03 04:38:02

+0

感谢您的帮助。 – 2009-11-03 17:55:17

互斥意味着互斥 - 信号量只是用来确定资源正在使用中的变量。在Windows中,可以创建一个Mutex对象来保护共享资源。

的问题是,你使用的是什么语言?什么操作系统(我假设Linux)。大多数语言都支持多线程和互斥,你应该使用内置的结构。

例如,用C在Linux上,你可能要

包括semaphore.h中

,并期待为sem_init调用,sem_wait等

+0

这个问题被标记为Linux。 – 2009-11-01 07:10:44