【问题标题】:How can I synchronized two process accessing on the same resources?如何同步访问同一资源的两个进程?
【发布时间】:2009-11-01 06:58:36
【问题描述】:

我有两个进程访问相同的物理内存(GPIO 数据地址)。 那么我怎样才能在这些应用程序之间进行同步呢? 我知道我们有互斥量和信号量之类的某种锁定机制,那么哪种方法最快呢?

感谢您的帮助,

-纳米

【问题讨论】:

    标签: linux synchronized


    【解决方案1】:

    互斥锁和信号量通常被认为是同一地址空间中的并发解决方案——这意味着同一程序的不同部分将使用这些装置之一锁定它们对资源的访问。

    当您处理单独的进程时,在 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 与 通信(可能是最好的方法)。

    【讨论】:

    • 互斥量和信号量当然可以跨进程使用。锁定文件方法会比任何一个都慢。
    • 特别是,Linux 上的 POSIX 互斥锁和条件变量支持共享内存,pthread_mutexattr_setpshared 和朋友。这可能是 Linux 上可用的最低开销 IPC 机制。但是,正确使用会稍微复杂一些。
    【解决方案2】:

    mutex 表示互斥——信号量只是一个变量,用于确定资源是否在使用中。在 Windows 中,可以创建一个 Mutex 对象来保护共享资源。

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

    例如,在 Linux 上使用 C,您可能想要

    包括信号量.h

    并查找对 sem_init、sem_wait 等的调用。

    【讨论】:

    • 问题被标记为 Linux。
    猜你喜欢
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    相关资源
    最近更新 更多