【发布时间】:2009-11-01 06:58:36
【问题描述】:
我有两个进程访问相同的物理内存(GPIO 数据地址)。 那么我怎样才能在这些应用程序之间进行同步呢? 我知道我们有互斥量和信号量之类的某种锁定机制,那么哪种方法最快呢?
感谢您的帮助,
-纳米
【问题讨论】:
标签: linux synchronized
我有两个进程访问相同的物理内存(GPIO 数据地址)。 那么我怎样才能在这些应用程序之间进行同步呢? 我知道我们有互斥量和信号量之类的某种锁定机制,那么哪种方法最快呢?
感谢您的帮助,
-纳米
【问题讨论】:
标签: linux synchronized
互斥锁和信号量通常被认为是同一地址空间中的并发解决方案——这意味着同一程序的不同部分将使用这些装置之一锁定它们对资源的访问。
当您处理单独的进程时,在 Linux 上执行此操作的标准方法是在 /var/lock 中创建一些内容,例如 /var/lock/myapp.lock 和 place your PID followed by a newline in it。然后其他进程会检查它是否存在,如果你很狡猾,请检查 PID 以确保它仍然存在。
如果你需要实时访问该区域,跳过文件系统,进程将不得不通过 IPC 进行通信(LET_ME_KNOW_WHEN_DONE,OKAY_IM_DONE,你明白了),或者——更好——写一个进程其唯一目的是读取和写入 GPIO 内存,而您的其他程序通过 IPC 与 它 通信(可能是最好的方法)。
【讨论】:
pthread_mutexattr_setpshared 和朋友。这可能是 Linux 上可用的最低开销 IPC 机制。但是,正确使用会稍微复杂一些。
mutex 表示互斥——信号量只是一个变量,用于确定资源是否在使用中。在 Windows 中,可以创建一个 Mutex 对象来保护共享资源。
问题是您使用的是什么语言?什么操作系统(我假设是 linux)。大多数语言都支持多线程和互斥,您应该使用内置结构。
例如,在 Linux 上使用 C,您可能想要
包括信号量.h
并查找对 sem_init、sem_wait 等的调用。
【讨论】: