【问题标题】:*nix System-wide threads and processes mutex*nix 系统范围的线程和进程互斥锁
【发布时间】:2010-07-05 13:17:05
【问题描述】:

我有一些资源,我想保护它们免受同一进程中的线程和不同进程之间的并发使用。 在 *nix 中“正确”的做法是什么?

例如我们想从多线程应用程序写入文件,该应用程序有时会分叉一些子进程。如何保证每个线程在一段时间内对文件有独占访问权?我正在寻找一个通用的答案,而不是仅适用于写入文件的答案,因为它也可能是共享内存段等。

【问题讨论】:

  • 我们正在使用的一种方法,但有一些缺点,是使用嵌套的 pthread_mutex_lock() 和flock(),但它在跨叉时存在一些问题。

标签: unix multithreading process mutex shared


【解决方案1】:

一个问题太笼统,因此是一个笼统的答案。

最灵活的同步工具可能是POSIX semaphores。还有旧的和繁琐的SysV IPC 信号量机制,根据平台支持,您可能不得不使用它。

您可能还想查看PTHREAD lock attributes 以了解您的平台是否支持共享语义。

【讨论】:

  • +1 命名 POSIX sem 尤其可在进程间和进程内访问(API 也相对简单)。
【解决方案2】:

如果资源是全局的并且需要共享访问,则必须使用锁。如果是线程本地的,则使用线程本地存储。如果可以是本地的,请使用本地对象。

【讨论】:

  • 感谢您的回答,但它太宽泛了,我问如何做可以将其他线程和进程锁定在关键部分之外的锁,我当然是在谈论全局资源。
  • AFAIK 所有类型的同步原语,如互斥锁和信号量,都会锁定其他线程和其他进程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
相关资源
最近更新 更多