问题标签 [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 投票
3 回答
15853 浏览

macos - Mac OS X 中的 Pthreads - 互斥锁问题

我正在尝试学习如何使用 POSIX 线程在 C 中编写并行算法。我的环境是带有 gcc 4 的 Mac OS X 10.5.5。

编译:

所以,我的问题是,如果我在 Ubuntu 9.04 机器中编译它,它会以线程顺序顺利运行,在 Mac 上看起来互斥锁不起作用,线程不会等待获取共享信息。

苹果电脑:

ubuntu

有任何想法吗?

按照下面的源代码:

0 投票
3 回答
3736 浏览

ruby-on-rails - Rails 进程的互斥锁

当通过Passenger 或Mongrel 部署Rails 时,您会运行多个应用程序实例。在共享资源上建立互斥锁的最佳实践或模式是什么,例如写入本地文件或远程文件。我想确保两个进程不会同时写入同一个资源。

0 投票
2 回答
1815 浏览

.net - 互斥锁是否正确实施以及如何处置它?

我正在查看一些代码,其中一个代码分析 (fxCop) 警告让我非常困惑。该代码通过在类的开头创建变量来实现一些互斥锁,类似于:

fxCop 弹出一条消息,说我必须为该类实现 IDisposable ,因为 Mutex 类实现了它 - 这是警告CA1001。但是看着 Mutex 它没有处置方法。

事实证明,Mutex 使用SafeWaitHandle(它实现了 IDisposable - 猜测这就是 fxCop 正在接受的),但 mutex 实际上并没有通过标准的一次性模式处理它。它有一个私有方法,使用RuntimeHelpers.CleanupCode分配给委托,据我了解,这意味着它将在异常上运行。

这就提出了两个问题:

  1. 互斥量是否正确实施?如果 Mutex 中没有异常,则永远不会释放 SafeWaitHandle。
  2. 我应该在我的处置中调用什么来清理互斥锁?
0 投票
6 回答
52849 浏览

language-agnostic - 互斥锁是如何实现的?

对于特定应用,某些实现是否比其他实现更好?推出自己的产品有什么好处吗?

0 投票
1 回答
6694 浏览

c++ - 如果我 ReleaseMutex() 两次会发生什么?

Microsoft 文档没有说明如果我ReleaseMutex() 在互斥锁已解锁时错误地调用会发生什么。

细节:

我正在尝试在无法访问编译器的情况下修复一些 Windows 代码。

我意识到 WinApi 互斥锁都是递归的,并且是引用计数的。如果我正在使用该功能,很明显额外的ReleaseMutex()调用会过早地减少引用计数器。

但是,我正在查看的代码不会递归地使用互斥锁,因此引用计数永远不会高于“1”。它确实释放互斥锁的次数超过了必要的次数……那会发生什么?引用计数是否为负数?它是否保持为零(解锁)并且只返回一个可忽略的错误?

(当然,这段代码在调用这些函数时实际上并不检查错误!)

0 投票
7 回答
378 浏览

windows - 在 ISAPI 过滤器中,用于多个进程的公共日志文件的好方法是什么?

我有一个在 IIS6 或 7 上运行的 ISAPI 过滤器。当有多个工作进程(“Web garden”)时,过滤器将被加载并在每个 w3wp.exe 中运行。

如何有效地允许过滤器将其活动记录在单个合并日志文件中?

  • 来自不同(并发)进程的日志消息不得相互干扰。换句话说,从任何 w3wp.exe 发出的单个日志消息必须在日志文件中实现为单个连续行。

  • 日志文件的争用应该最小。这些网站每秒可以处理 100 个请求。

  • 严格的时间顺序是首选。换句话说,如果 w3wp.exe 进程 #1 在 t1 发出消息,然后进程 #2 在 t2 发出消息,然后进程 #1 在 t3 发出消息,则消息应该以正确的时间顺序出现在日志文件中。

我目前的方法是每个进程都拥有一个单独的日志文件。这有明显的缺点。

一些想法:

  • 指定 w3wp.exe 之一为“日志文件所有者”,并通过该特殊进程发送所有日志消息。这在工作进程回收的情况下存在问题。

  • 使用操作系统互斥锁来保护对日志文件的访问。这足够高性能吗?在这种情况下,每个 w3wp.exe 在同一个文件系统文件上都有一个 FILE。每次写入后我必须刷新日志文件吗?这行得通吗?

有什么建议么?

0 投票
6 回答
39533 浏览

c++ - 我需要一个互斥锁来阅读吗?

我有一个类,它有一个状态(一个简单的枚举),可以从两个线程访问。为了改变状态,我使用互斥锁(boost::mutex)。检查状态是否安全(例如比较 state_ == ESTABLISHED)还是在这种情况下我也必须使用互斥锁?换句话说,当我只想读取一个可以由另一个线程同时写入的变量时,我是否需要互斥锁?

0 投票
4 回答
3453 浏览

windows - 被互斥锁阻塞的等待线程的执行顺序

我有一个互斥锁,它控制从多个线程对单个对象的访问。当线程完成时,互斥锁被解锁以允许订单线程对对象进行操作。在使用 WaitForSingleObject 函数的 Windows 上,是否有线程发出信号的顺序?我希望现在允许尝试锁定互斥锁的第一个线程锁定互斥锁。这将是一个 FIFO 队列,因此向阻塞线程发出的信号不是随机的。我是否必须实现自己的排队机制来实现这一点?如果是这样,哪些功能有用?

0 投票
3 回答
33254 浏览

c# - c#中的互斥量和信号量是什么?我们需要在哪里实施?

C# 中的互斥量和信号量是什么?我们需要在哪里实施?

我们如何在多线程中使用它们?

0 投票
0 回答
832 浏览

ruby - Ruby 中的线程锁定(soap4r 和 QT 的使用)

[编辑注意:注意到我已将互斥锁创建放在构造函数中。移动它,并没有发现任何变化。]

[编辑说明 2:我在试运行中将对 app.exec 的调用更改为

我注意到一旦 Soap4r 服务开始运行,就不会再调用任何进程事件]

[编辑说明 3:在此处创建了一个相关问题:Thread lockup in ruby​​ with Soap4r

我正在尝试编写一个 ruby​​ 程序,它接收 SOAP 命令以在监视器上绘图(从而允许远程监视器访问)。我已经组装了一个简单的测试应用程序来原型化这个想法。图形工具包是 QT。我有我认为是锁定问题。我在所示代码中添加了测试服务器中方法的调用。我现在正在测试的服务器端是:

现在,当我运行它时,我得到以下输出:

正在尝试启动服务器 正在
启动?
接收呼叫
0
#<Qt::MainWindow:0x60fea28>
锁定
接收呼叫
0
#<Qt::MainWindow:0x60fea28>
This:1--
锁定
This :2--
锁定

在那一点上,我挂起而不是收到我期望的总共五个添加。Qt 会显示由“createWindow(10,0,10,10)”和“createWindow(10,10,10,10)”定义的方块。鉴于 "This:1--" 和 "This:2--" 显示在下一个输入/输出锁对中,我假设我使用互斥锁非常错误。这是我第一次在 Ruby 中使用线程。