问题标签 [mutex]

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 投票
7 回答
38613 浏览

c# - C# 中各种线程同步选项有什么区别?

有人可以解释以下之间的区别:

  • 锁定(某个对象){}
  • 使用互斥锁
  • 使用信号量
  • 使用监视器
  • 使用其他 .Net 同步类

我就是想不通。在我看来,前两个是一样的?

0 投票
3 回答
884 浏览

c++ - 这一小段互斥代码有什么问题?

使用Entrek Codesnitch软件调试和测试是否有内存泄漏等,报如下错误:

也许我所有的不眠之夜终于来到了我身边。但我不明白它到底在抱怨什么。有任何想法吗?

0 投票
5 回答
8858 浏览

linux - 使用锁定文件避免两个脚本实例同时运行时如何避免竞争条件?

避免同一脚本的两个实例同时运行的典型方法如下所示:

有没有更好的方法来锁定来自 shell 脚本的文件,避免竞争条件?必须改用目录吗?

0 投票
2 回答
9475 浏览

c# - C# mutex - 从 ASP.NET 和控制台应用程序调用错误

我正在使用全局命名互斥锁在 ASP.NET 应用程序和控制台应用程序之间进行文件访问同步。

在运行 ASP.NET 应用程序时,控制台应用程序无法按预期获取互斥锁。运行控制台应用程序时,ASP.NET 应用程序抛出UnauthorizedAccessException: Access to the path 'Global\TheNameOfTheMutex' is denied.

我将尝试捕获异常并将其视为未能获取互斥锁,但我想知道它为什么会这样?如果从两个不同的浏览器访问 ASP.NET 应用程序,则它会按预期运行,并且控制台应用程序在运行多个实例时也会按预期运行。

更新:在 Windows XP 上,当 ASP.NET 应用程序运行并且我尝试启动控制台应用程序时,也会引发异常。

用于同步的代码在一个通用程序集中:

环境:Windows Server 2008、IIS 7、ASP.NET 2.0

0 投票
1 回答
196 浏览

com - Nant 中的互斥锁

如何在 Nant 中实现互斥锁?我需要这个功能的原因是因为我注册了 COM 组件以使我的构建工作。然后在构建结束时,我取消注册 COM 组件。

没有互斥锁,不同版本的 COM 被注册并面临一些问题。

因此,如果我们在 Nant 脚本中应用互斥锁会更好。这样,如果构建正在运行,其他项目将等到它完成。

0 投票
2 回答
14053 浏览

initialization - pthread_mutex_t 初始化错误

我在老虎上使用 xcode 2.4.1。当我在下面做的时候一切都好。当我做

我得到这两个错误

我不知道为什么。但是,如果我这样做 pthread_mutex_t 静音 = PTHREAD_MUTEX_INITIALIZER; 它工作正常。为什么?

-edit- 我还没有运行它,但这似乎可以编译。为什么?嗯?

0 投票
6 回答
4459 浏览

mutex - 互斥问题

请看下面的伪代码:

我认为可以使用上面的代码实现一个简单的互斥解决方案。但它不起作用。有谁知道为什么?

任何帮助将不胜感激!

0 投票
3 回答
18311 浏览

c# - C# - 互斥锁的锁定问题

我有一个 Web 应用程序,它控制哪些 Web 应用程序从我们的负载均衡器获取流量。Web 应用程序在每个单独的服务器上运行。

它跟踪处于 ASP.NET 应用程序状态的对象中每个应用程序的“输入或输出”状态,并且只要状态发生更改,该对象就会被序列化为磁盘上的一个文件。当 Web 应用程序启动时,状态会从文件中反序列化。

虽然该站点本身只收到几个请求,而且它很少访问该文件,但我发现由于某种原因在尝试读取或写入文件时很容易发生冲突。这种机制需要非常可靠,因为我们有一个自动化系统,定期对服务器进行滚动部署。

在任何人发表任何质疑上述任何谨慎性的评论之前,请允许我简单地说,解释其背后的原因会使这篇文章比现在长得多,所以我想避免搬山。

也就是说,我用来控制对文件的访问的代码如下所示:

通常有效,但有时我无法访问互斥锁(我在日志中看到“无法获得锁定”事件)。我无法在本地重现这个 - 它只发生在我的生产服务器(Win Server 2k3/IIS 6)上。如果我删除超时,应用程序将无限期挂起(竞争条件??),包括后续请求。

当我确实收到错误时,查看事件日志告诉我,在记录错误之前,前一个请求已实现并释放了互斥锁。

互斥体在 Application_Start 事件中实例化。在声明中静态实例化它时,我得到相同的结果。

借口,借口:线程/锁定不是我的强项,因为我通常不必担心它。

关于为什么它随机无法获得信号的任何建议?


更新:

我已经添加了正确的错误处理(多么令人尴尬!),但我仍然遇到相同的错误 - 并且为了记录,未处理的异常从来都不是问题。

只有一个进程会访问该文件——我没有为此应用程序的网络池使用网络花园,也没有其他应用程序使用该文件。我能想到的唯一例外是当应用程序池回收时,旧的 WP 在创建新的 WP 时仍处于打开状态 - 但我可以从任务管理器中看出问题发生在只有一个工作进程时。

@mmr:使用 Monitor 与使用 Mutex 有何不同?根据 MSDN 文档,它看起来好像在有效地做同样的事情——如果我不能用我的 Mutex 获得锁,它通过返回 false 来优雅地失败。

另一件需要注意的事情:我遇到的问题似乎完全是随机的 - 如果它在一个请求上失败,它可能会在下一个请求上正常工作。似乎也没有模式(至少肯定没有其他模式)。


更新 2:

此锁不用于任何其他调用。在 InvokeOnFile 方法之外引用 _lock 的唯一时间是在实例化它时。

调用的 Func 要么从文件中读取并反序列化为对象,要么将对象序列化并将其写入文件。这两个操作都不是在单独的线程上完成的。

ServerState.PATH 是一个静态只读字段,我不希望它会导致任何并发问题。

我还想重申我之前的观点,即我无法在本地(在 Cassini 中)重现这一点。


得到教训:

  • 使用正确的错误处理(呃!)
  • 为工作使用正确的工具(并对工具的作用/方式有基本的了解)。正如 sambo 指出的那样,使用 Mutex 显然有很多开销,这导致我的应用程序出现问题,而 Monitor 是专门为 .NET 设计的。
0 投票
4 回答
994 浏览

c++ - 为什么锁会起作用?

如果锁确保一次只有一个线程访问锁定的数据,那么什么控制对锁定功能的访问?

我认为boost::mutex::scoped_lock应该在我的每个函数的开头,这样局部变量就不会被另一个线程意外修改,对吗?如果两个线程试图在非常接近的时间获取锁怎么办?内部使用的锁的局部变量不会被其他线程破坏吗?

我的问题不是特定于提升的,但除非您推荐另一个,否则我可能会使用它。

0 投票
12 回答
23932 浏览

delphi - 如何判断我的程序的另一个实例是否已经在运行?

如何判断我的程序的一个实例是否正在运行?我以为我可以用数据文件来做到这一点,但它会很乱:(

我想这样做,因为我只希望在某一时刻打开 1 个实例。