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