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

c++ - 如何检测哪个互斥锁为操作系统提供了最大的时间?

如何测量互斥体给操作系统的时间量?主要目标是检测一个互斥体,它会在最长时间内阻塞线程。

PS:我试过oprofile。它报告 30% 的时间花在 vmlinux/.poll_idle 中。这是出乎意料的,因为该应用程序旨在占用其核心的 100%。因此,我怀疑在等待某个互斥锁时将时间返回给操作系统,并且 oprofile 将其报告为空闲时间。

0 投票
3 回答
25727 浏览

c++ - 为什么 Boost scoped_lock 不解锁互斥锁?

我一直boost::mutex::scoped_lock以这种方式使用:

基本上它设置waitBoolean,而另一个线程通过将waitBoolean设置为false来表示它已完成;

但是,这似乎不起作用,因为其他线程无法锁定 mutex_ !

我假设通过将 scoped_lock 括在括号中,我将终止它的锁定。不是这样吗?在线阅读说它只有在调用析构函数时才放弃互斥锁。当它超出本地范围时,它不会被销毁吗?

信号部分代码:

谢谢!

0 投票
9 回答
31341 浏览

c++ - pthread互斥体的开销?

我正在尝试使 C++ API(用于 Linux 和 Solaris)线程安全,以便可以从不同的线程调用它的函数而不会破坏内部数据结构。在我目前的方法中,我使用 pthread 互斥锁来保护对成员变量的所有访问。这意味着一个简单的 getter 函数现在可以锁定和解锁互斥体,我担心这样做的开销,特别是因为该 API 将主要用于单线程应用程序中,任何互斥体锁定似乎都是纯粹的开销。

所以,我想问一下:

  • 您对使用锁定与不使用锁定的单线程应用程序的性能有什么经验吗?
  • 与例如相比,这些锁定/解锁调用有多昂贵。对 bool 成员变量进行简单的“返回 this->isActive”访问?
  • 您知道保护此类变量访问的更好方法吗?
0 投票
5 回答
1131 浏览

c++ - 如何确保只有 1 个互斥锁?

我在这里运行一些线程安全代码。我正在使用互斥锁来保护一次只需要由 1 个线程运行的代码部分。我遇到的问题是使用此代码有时会得到 2 个 Mutex 对象。顺便说一下,这是一个静态函数。如何确保只创建 1 个互斥对象?

0 投票
3 回答
1061 浏览

java - 应用程序为什么/如何保留由另一个进程创建的互斥引用?

我有这个有点不寻常的流程结构:

  1. Launch4J 启动我的 Java 应用程序。它创建一个互斥体来为 Java 应用程序提供单实例功能。
  2. Java 应用程序启动一个可以有多个实例的 VB6 应用程序。
  3. 当 Java 应用程序终止时,VB6 应用程序仍在运行。(期望的行为)

问题是:Launch4J 创建的互斥锁只有在 VB6 应用程序终止后才会释放。因此,无法再次启动 Java 应用程序。

为什么会发生这种情况?我没有明确地打开互斥锁......

我首先怀疑这是因为 Java 使用CreateProcesswith bInheritHandles == true,但是当我开始时问题并没有出现notepad.exe

编辑:我仍然有这个问题。任何指针表示赞赏!

0 投票
2 回答
5088 浏览

c - C - Pthreads 互斥和一般头痛

嘿伙计们,我想知道是否有人可以提供一点帮助。

我一直在尝试自学 pthreads 和互斥锁,以使线程一起运行并使用相同的结构,而不是读取和写入坏数据。

我现在的问题是,

从我的线程函数中,如果我调用一个可能类似于以下内容的辅助函数:

上面的这个辅助方法似乎并没有“更新”结构。

但是,如果我在线程函数中运行相同的代码,完全相同的 4 行,那么这似乎可以工作。

我究竟做错了什么?或者我该如何解决这个问题?如果有人也可以提供一些阅读,那将是完美的。

编辑:对不起,这是我的代码中的错字。

这是我用于结构的实际代码。

如果 addCar 中的相同行在线程函数中,它会增加大小,如果它在这个辅助函数中,则不会。

这是调用代码

0 投票
2 回答
1734 浏览

python - Django:简单的速率限制

我的许多观点都获取外部资源。我想确保在重负载下我不会炸毁远程站点(和/或被禁止)。

我只有 1 个履带,所以有一个中央锁就可以了。

所以细节:我希望每秒最多允许对主机进行 3 个查询,并且让其余的块最多 15 秒。我怎么能(轻松)做到这一点?

一些想法:

  • 使用 django 缓存
    • 似乎只有 1 秒的分辨率
  • 使用基于文件的信号量
    • 容易为并发做锁。不知道如何确保每秒只进行 3 次提取。
  • 使用一些共享内存状态
    • 我宁愿不安装更多的东西,但如果我必须的话。
0 投票
3 回答
28184 浏览

mutex - 获取互斥锁列表?

程序在其启动过程中创建互斥锁。我不知道这个互斥锁的格式,所以我想知道是否有办法获取所有非废弃互斥锁的列表,打开程序,获取一个新列表,看看是否可以通过删除所有重复条目找到互斥锁.

有没有办法得到这个列表?

0 投票
3 回答
919 浏览

c++ - 在逗号运算符的 LHS 中初始化匿名互斥锁持有类实例

假设我有这样的代码:

如果函数test_raiicomma_1() 是从多个线程调用的,它会锁定一个互斥体以防止任何其他线程同时调用Func()。互斥体在构造变量时被锁定,mut1_lock在超出范围并被破坏时释放。

这工作得很好,但作为一种风格,需要为持有锁的临时对象命名让我很恼火。该函数test_raiicomma_2()试图通过初始化锁对象并Func()在一个表达式中调用该函数来避免这种情况。

直到表达式结束才调用临时对象析构函数是否正确, afterFunc()已返回?(如果是这样,你认为使用这个成语是否值得,或者在单独的语句中声明锁总是更清楚?)

如果该函数test_raiicomma_3()需要锁定两个互斥锁,那么互斥锁在调用之前会按顺序锁定Func(),然后释放,但不幸的是可能会以任一顺序释放,这是否正确?

0 投票
4 回答
198 浏览

c# - 我怎样才能有许多线程需要知道下一个要处理的 ID,然后安全地增加该数字?

我正在开发一个有一堆线程处理数据的程序。

每个线程都需要获取下一个可用 ID,为下一个线程将该 ID 加 1,并以线程安全的方式执行此操作。

这是我会使用互斥锁的实例吗?我应该改用 Queue.Synchronized 并用所有 300,000 个 ID 填充它还是这是不必要的?

我是否应该只有一个整数并以某种方式锁定该数字的检索和更新,以便 thread1 进入,获取“20”作为下一个 ID,然后在另一个线程等待时将其增加到“21”?

这个用例的最佳实践是什么?