代码之家  ›  专栏  ›  技术社区  ›  ijw

在Unix中崩溃时自动释放互斥锁

  •  2
  • ijw  · 技术社区  · 15 年前

    我有两个程序通过共享内存段进行交互。当使用段进行读或写时,它们持有一个锁。

    如果他们中的任何一个在关键区域崩溃(被杀死,通常-可能有一些不可惊吓的事情),我希望他们释放锁,这样shmem就不会被完全锁定。

    其他问题在Windows、Java等中给出了答案,但是在Unix(特别是Linux)中如何做到呢?

    (我没有附加到pthreads mutex函数;SysV信号量或其他任何东西都可以。)

    3 回复  |  直到 15 年前
        1
  •  8
  •   R.. GitHub STOP HELPING ICE    15 年前
        2
  •  2
  •   cdhowie    15 年前

    我想这是故意的。如果其中一个进程崩溃,很可能是因为关键部分被锁定而中断,并且存储在共享内存段中的数据不一致、无效或不安全。访问内存并像从另一个进程中什么也没发生一样操作,很可能会使它崩溃或更糟,这取决于它做了什么。

        3
  •  0
  •   jilles    15 年前

    System V信号量支持 SEM_UNDO 选择这样做。但是,与健壮的互斥锁不同,这不会通知下一个线程获取锁。从好的方面来说,它们比健壮的互斥锁更易于移植。