问题标签 [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.
c# - C# 中各种线程同步选项有什么区别?
有人可以解释以下之间的区别:
- 锁定(某个对象){}
- 使用互斥锁
- 使用信号量
- 使用监视器
- 使用其他 .Net 同步类
我就是想不通。在我看来,前两个是一样的?
c++ - 这一小段互斥代码有什么问题?
使用Entrek Codesnitch软件调试和测试是否有内存泄漏等,报如下错误:
也许我所有的不眠之夜终于来到了我身边。但我不明白它到底在抱怨什么。有任何想法吗?
linux - 使用锁定文件避免两个脚本实例同时运行时如何避免竞争条件?
避免同一脚本的两个实例同时运行的典型方法如下所示:
有没有更好的方法来锁定来自 shell 脚本的文件,避免竞争条件?必须改用目录吗?
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
com - Nant 中的互斥锁
如何在 Nant 中实现互斥锁?我需要这个功能的原因是因为我注册了 COM 组件以使我的构建工作。然后在构建结束时,我取消注册 COM 组件。
没有互斥锁,不同版本的 COM 被注册并面临一些问题。
因此,如果我们在 Nant 脚本中应用互斥锁会更好。这样,如果构建正在运行,其他项目将等到它完成。
initialization - pthread_mutex_t 初始化错误
我在老虎上使用 xcode 2.4.1。当我在下面做的时候一切都好。当我做
我得到这两个错误
我不知道为什么。但是,如果我这样做 pthread_mutex_t 静音 = PTHREAD_MUTEX_INITIALIZER; 它工作正常。为什么?
-edit- 我还没有运行它,但这似乎可以编译。为什么?嗯?
mutex - 互斥问题
请看下面的伪代码:
我认为可以使用上面的代码实现一个简单的互斥解决方案。但它不起作用。有谁知道为什么?
任何帮助将不胜感激!
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 设计的。
c++ - 为什么锁会起作用?
如果锁确保一次只有一个线程访问锁定的数据,那么什么控制对锁定功能的访问?
我认为boost::mutex::scoped_lock应该在我的每个函数的开头,这样局部变量就不会被另一个线程意外修改,对吗?如果两个线程试图在非常接近的时间获取锁怎么办?内部使用的锁的局部变量不会被其他线程破坏吗?
我的问题不是特定于提升的,但除非您推荐另一个,否则我可能会使用它。
delphi - 如何判断我的程序的另一个实例是否已经在运行?
如何判断我的程序的一个实例是否正在运行?我以为我可以用数据文件来做到这一点,但它会很乱:(
我想这样做,因为我只希望在某一时刻打开 1 个实例。