问题标签 [mutual-exclusion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
23 回答
89821 浏览

python - 确保只有一个程序实例正在运行

是否有一种 Pythonic 方式可以只运行一个程序实例?

我想出的唯一合理的解决方案是尝试在某个端口上将其作为服务器运行,然后第二个程序尝试绑定到同一端口 - 失败。但这并不是一个好主意,也许还有比这更轻量级的东西?

(考虑到程序有时会失败,即段错误 - 所以像“锁定文件”这样的东西不会起作用)

0 投票
3 回答
5354 浏览

perl - 确保只有一个 Perl 程序实例在运行的最佳方法是什么?

有几种方法可以做到这一点,但我不确定哪一种是最好的。

这是我能想到的:

  • 使用 pgrep 查找进程。
  • 使用flock 让脚本自己锁定,然后在每次运行时检查它是否被锁定。
  • 在 /var/run/program_name.pid 中创建一个 pid 文件并检查是否存在,并在需要时比较 pid。

可能有更多方法可以做到这一点。你认为最好的方法是什么?

0 投票
4 回答
1576 浏览

c# - 互斥:这样安全吗?

这种互斥模式是否像我认为的那样安全?如果是这样,你怎么称呼它?

我想确保关键部分,但没有其他线程堆积等待获取锁。显然,我确保标志没有设置在其他任何地方。有没有更好的办法?

0 投票
4 回答
485 浏览

multithreading - 为什么叫“监视器”?

我指的是这里描述的监视器:

http://en.wikipedia.org/wiki/Monitor_(同步)

这里的定义似乎都不恰当:

http://www.thefreedictionary.com/monitor

那么他们为什么这么称呼呢?

== 更新 ==

谢谢大家的解答!

我想我很困惑,因为我认为监视器通常不会对自己起作用,这似乎就是这里发生的事情。例如,您使用婴儿监视器来监视婴儿。我只是认为让婴儿监控自己没有多大意义,但我可能是错的。

0 投票
9 回答
24608 浏览

java - 仅在尚未运行时启动 Java 程序

我需要在我的 Java 应用程序中启动 1-3 个外部程序,这些程序的路径由用户定义。我有几个要求:

  1. 如果程序已经在运行,我不希望它执行

  2. 我不希望任何程序从我的 Java 应用程序中窃取焦点

  3. 我不在乎他们中的任何一个是否无法启动。他们只需要默默地失败。

到目前为止,这是我想出的:

然后我用其他两条路径再重复 3 次。这就像我期望的那样开始并且很好地满足了我的第三个要求,但前两个失败了。

做这个的最好方式是什么?

编辑:

  1. 我无法控制这些其他应用程序。他们是第三方。此外,它们可以随时由用户手动启动或停止。

  2. 我知道可执行文件的确切名称(例如“blah.exe”),它们总是相同的,但可执行文件的路径不一定是。

  3. 批处理文件包装器在这里不可行。

  4. 其他应用程序不是Java 应用程序,只是普通的旧 Windows 可执行文件。

0 投票
1 回答
1450 浏览

c# - 互斥存储过程

我想使用数据库表创建一些分布式互斥。在存储过程上有以下接口会很好:

等待(唯一标识符)

我最初是想通过一个唯一标识符表来实现这一点。对该过程的调用将一直等到表中不存在唯一标识符。但是,我不确定当从表中删除指定的唯一标识符时如何使调用线程唤醒。

有任何想法吗?如果数据库不是执行此操作的正确位置,是否有任何第三方工具可以工作(最好是开源的)?

(为了避免死锁,我要么想在等待操作中包含一个超时,要么让 SqlCommand 有一个超时)

0 投票
2 回答
2067 浏览

c - 互斥和 C 套接字

我正在维护一个现有系统,其中以前的开发人员对每个操作都在套接字上执行,需要多个线程来读取和写入,以前的开发人员已经在控制和互斥锁下执行了 io 操作。是否需要相互排除 C 套接字 IO 操作?或者由于套接字是全双工的,使用互斥体是多余的?只有一个线程

毫无疑问,线程将对象放入的处理队列是共享内存,必须注意相互排斥它。

0 投票
9 回答
12498 浏览

locking - 监视器和锁定之间的区别?

监视器有什么区别?

如果锁只是互斥的一种实现,那么监视器只是一种利用方法执行之间的等待时间的方法吗?

一个好的解释将非常有帮助谢谢....

问候

0 投票
3 回答
8476 浏览

c - 针对特定场景的最佳 Linux 内核锁定机制是什么

我需要解决这种情况下的锁定问题:

  1. 多CPU系统。
  2. 所有 CPU 都使用公共(软件)资源。
  3. 对资源的只读访问是很常见的。(处理传入的网络数据包)
  4. 写访问的频率要低得多。(几乎只有配置更改)。

目前我使用read_lock_bh, write_lock_bh(自旋锁)机制。问题是 CPU 越多,我在编写器上下文中获得的软锁定就越多。

我读了这本书的并发章节,但不太明白在使用自旋锁时,读者或作者是否会获得优先权。

所以问题是:

  1. Linux自旋锁机制是否优先考虑读取器/写入器/没有它们?
  2. 有没有更好的机制可以用来避免在我的场景中出现这些软锁定,或者在使用我当前的解决方案时,我是否可以在尝试获取锁时优先考虑写入器?

谢谢,尼尔

0 投票
1 回答
1259 浏览

multithreading - 读/写同步

我有一个数据结构,它的操作可以分为读操作(例如查找)和写操作(例如插入、删除)。这些操作应该同步,以便:

  • 执行写入操作时不能执行读取操作(除非在同一线程上),但是读取操作可以与其他读取操作同时执行。
  • 在执行读取或写入操作时无法执行写入操作(除非在同一线程上)。

这种同步如何实现?

该平台是win-api,因此api的同步对象和联锁功能是基本的构建块。