我有两个访问相同物理内存的进程(GPIO数据地址)。 那么如何在这些应用程序之间进行同步? 我知道我们有一些锁定机制,如互斥和信号量,那么哪种方法最快?
感谢您的帮助,
-nm
答案 0 :(得分:0)
互斥锁和信号量通常被认为是同一地址空间中的并发解决方案 - 这意味着同一程序的不同部分将使用其中一个绑定来锁定对资源的访问。
当您处理单独的流程时,在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与它进行通信(可能是最好的方法)。
答案 1 :(得分:0)
互斥是指互斥 - 信号量只是用于确定资源是否在使用中的变量。在Windows中,可以创建一个Mutex对象来保护共享资源。
问题在于您使用的语言是什么?什么操作系统(我假设是linux)。大多数语言都支持多线程和互斥,您应该使用内置构造。
例如,在Linux上使用C,您可能想要
包括semaphore.h
并查找sem_init,sem_wait等的调用。