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

c++ - Boost 的作用域互斥锁和 WinAPi 的临界区有区别吗?

在 Windows 环境中,Boost 的作用域互斥锁是使用 WinAPI 的关键部分还是其他什么?

0 投票
4 回答
1035 浏览

multithreading - 静态类的析构函数需要互斥锁吗?

我们有一个静态(单例)类,它将在多线程环境中使用。我们在其构造函数和其他 mrmber 函数中使用互斥锁。但是,析构函数没有互斥锁。析构函数执行一些任务,例如清理其他一些成员对象等。我们是否还需要在析构函数中使用互斥锁?

0 投票
2 回答
21967 浏览

c++ - pthread_mutex_lock 上的分段错误

我尝试做时遇到分段错误

这真的很奇怪,我不确定是什么原因造成的。我已经在构造函数中初始化了 _mutex

我能做什么?

0 投票
1 回答
3392 浏览

c# - .NET:使用 Mutex 确保一次只调用一次 Web 服务

我正在使用互斥锁来确保 Web 服务一次只运行一次,但我无法使用 WaitOnce 和 ReleaseMutex 100% 正确地实现它。

我有这个:

如果我尝试立即访问 web 服务两次,第二次调用不会返回 false,但我从 mutex.ReleaseMutex 获得 ApplicationException(“objectsyncronization 方法是从 onsyncronized 代码块调用的” - 大致翻译自瑞典语)

最好的方法是什么?

0 投票
5 回答
633 浏览

c# - 可靠地检测到我的另一个应用程序正在运行

我有两个应用程序,一个 WinForms 应用程序和一个 Windows 服务,它们都将在同一台机器上运行。我希望 WinForms 应用程序能够可靠地检测服务何时运行。我可以完全控制这两个应用程序的设计和实现。

我的第一个想法是使用Mutex,由服务实例化并由 WinForms 应用程序检测到。

有更好的设计吗?

0 投票
2 回答
2192 浏览

c++ - 在持有 boost::interprocess::scoped_lock 时休眠会导致它永远不会被释放

我正在使用参考(匿名互斥锁示例)在Linux进行IPCboost::interprocess::shared_memory_object

有一个服务器进程,它创建shared_memory_object并写入它,同时将一个interprocess_mutex包裹在一个scoped_lock;中。和一个客户端进程,它打印另一个人写的任何东西——在这种情况下,它是一个int.

我遇到了一个问题:如果服务器在持有互斥锁时休眠,则客户端进程永远无法获取它并永远等待。

错误的服务器循环:

服务器输出:

客户端循环:

客户端输出(永远等待):

问题是,如果我将括号移到sleep通话前的那一行,一切正常。为什么?我不认为与锁定的互斥锁一起睡觉会导致互斥锁永远被锁定。

我唯一的理论是,当内核唤醒服务器进程时,作用域结束并释放互斥锁,但等待进程没有机会运行。然后服务器重新获取锁......但这似乎没有多大意义。

谢谢!

0 投票
6 回答
104077 浏览

c++ - boost shared_mutex(多次读取/一次写入)的示例?

我有一个多线程应用程序,它必须经常读取一些数据,并且偶尔会更新这些数据。现在,互斥锁可以安全地访问该数据,但它很昂贵,因为我希望多个线程能够同时读取,并且仅在需要更新时将它们锁定(更新线程可以等待其他线程完成) .

我认为这boost::shared_mutex是应该做的,但我不清楚如何使用它,也没有找到一个明确的例子。

有没有人有一个简单的例子可以用来开始?

0 投票
2 回答
1675 浏览

c++ - C++/GLFW - 使用 Mutex 对象的正确方法?

我正在研究一个广泛使用多线程的模拟。问题是,到目前为止,我从未使用任何互斥对象来保护我的数据。结果是我遇到了一堆分段错误。

我正在尝试在读/写时使用互斥锁锁定/解锁,但这会导致我出现另一个段错误:

当然,我创建了一个测试项目,在该项目中我应用了锁定/解锁的基本情况并且它起作用了,这是一个基本示例,展示了如何使用 GLFW 处理 Mutex 对象:

我正在工作的项目更大,我有 5 个线程在上面运行,并且同时访问了很多向量、地图、队列。在代码的某处,我尝试执行以下操作:

之所以将我的 VehicleManager:CreateVehicles() 方法放在锁定/解锁之间,是因为在此方法中有这一行:

所以我想保护向量:vehicles_。但是,结果我得到了上面的段错误。即使有:

我有同样的段错误。

我希望,我已经让自己足够清楚,让您了解我的问题的本质。我想,并不是所有人都使用过 GLFW,这就是为什么我给你第一个基本示例,以便你了解互斥锁如何与这个库一起工作。

谢谢 !

0 投票
6 回答
8336 浏览

c++ - 不锁定 pthread_cond_timedwait 和 pthread_cond_signal 的互斥锁(在 Linux 上)

调用 pthread_cond_timedwait 而不先锁定相关联的互斥锁,并且在调用 pthread_cond_signal 时也不使用互斥锁,是否有任何缺点?

就我而言,确实没有条件检查,我想要一个与 Java wait(long) 和 notify() 非常相似的行为。

根据文档,可能存在“不可预测的调度行为”。我不确定那是什么意思。

一个示例程序似乎可以在不首先锁定互斥锁的情况下正常工作。

0 投票
2 回答
1590 浏览

c# - 如何避免多个应用程序实例?

我有一个应用程序“myprogram.exe”,它调用 dll 中的函数和代码,其中一个“myprogram.exe”调用的函数创建了一个新的 winform 实例“MyForm.cs”,然后使用表单显示它。显示();。

我可以运行“n”个“myprogram.exe”实例,但我希望每个“myprogram.exe”实例只有一个“MyForm.cs”实例。

我遇到的问题是,即使我在“MyForm.cs”中使用互斥锁来创建互斥锁,他们也会询问它的实例是否已经在运行,有时,它会创建另一个实例,尽管有互斥锁。

是否有另一种方法可以用来验证“myprogram.exe”的实例是否已经创建了“MyForm.cs”的实例。