问题标签 [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++ - 如何检测哪个互斥锁为操作系统提供了最大的时间?
如何测量互斥体给操作系统的时间量?主要目标是检测一个互斥体,它会在最长时间内阻塞线程。
PS:我试过oprofile。它报告 30% 的时间花在 vmlinux/.poll_idle 中。这是出乎意料的,因为该应用程序旨在占用其核心的 100%。因此,我怀疑在等待某个互斥锁时将时间返回给操作系统,并且 oprofile 将其报告为空闲时间。
c++ - 为什么 Boost scoped_lock 不解锁互斥锁?
我一直boost::mutex::scoped_lock
以这种方式使用:
基本上它设置waitBoolean,而另一个线程通过将waitBoolean设置为false来表示它已完成;
但是,这似乎不起作用,因为其他线程无法锁定 mutex_ !
我假设通过将 scoped_lock 括在括号中,我将终止它的锁定。不是这样吗?在线阅读说它只有在调用析构函数时才放弃互斥锁。当它超出本地范围时,它不会被销毁吗?
信号部分代码:
谢谢!
c++ - pthread互斥体的开销?
我正在尝试使 C++ API(用于 Linux 和 Solaris)线程安全,以便可以从不同的线程调用它的函数而不会破坏内部数据结构。在我目前的方法中,我使用 pthread 互斥锁来保护对成员变量的所有访问。这意味着一个简单的 getter 函数现在可以锁定和解锁互斥体,我担心这样做的开销,特别是因为该 API 将主要用于单线程应用程序中,任何互斥体锁定似乎都是纯粹的开销。
所以,我想问一下:
- 您对使用锁定与不使用锁定的单线程应用程序的性能有什么经验吗?
- 与例如相比,这些锁定/解锁调用有多昂贵。对 bool 成员变量进行简单的“返回 this->isActive”访问?
- 您知道保护此类变量访问的更好方法吗?
c++ - 如何确保只有 1 个互斥锁?
我在这里运行一些线程安全代码。我正在使用互斥锁来保护一次只需要由 1 个线程运行的代码部分。我遇到的问题是使用此代码有时会得到 2 个 Mutex 对象。顺便说一下,这是一个静态函数。如何确保只创建 1 个互斥对象?
java - 应用程序为什么/如何保留由另一个进程创建的互斥引用?
我有这个有点不寻常的流程结构:
- Launch4J 启动我的 Java 应用程序。它创建一个互斥体来为 Java 应用程序提供单实例功能。
- Java 应用程序启动一个可以有多个实例的 VB6 应用程序。
- 当 Java 应用程序终止时,VB6 应用程序仍在运行。(期望的行为)
问题是:Launch4J 创建的互斥锁只有在 VB6 应用程序终止后才会释放。因此,无法再次启动 Java 应用程序。
为什么会发生这种情况?我没有明确地打开互斥锁......
我首先怀疑这是因为 Java 使用CreateProcess
with bInheritHandles == true
,但是当我开始时问题并没有出现notepad.exe
。
编辑:我仍然有这个问题。任何指针表示赞赏!
c - C - Pthreads 互斥和一般头痛
嘿伙计们,我想知道是否有人可以提供一点帮助。
我一直在尝试自学 pthreads 和互斥锁,以使线程一起运行并使用相同的结构,而不是读取和写入坏数据。
我现在的问题是,
从我的线程函数中,如果我调用一个可能类似于以下内容的辅助函数:
上面的这个辅助方法似乎并没有“更新”结构。
但是,如果我在线程函数中运行相同的代码,完全相同的 4 行,那么这似乎可以工作。
我究竟做错了什么?或者我该如何解决这个问题?如果有人也可以提供一些阅读,那将是完美的。
编辑:对不起,这是我的代码中的错字。
这是我用于结构的实际代码。
如果 addCar 中的相同行在线程函数中,它会增加大小,如果它在这个辅助函数中,则不会。
这是调用代码
python - Django:简单的速率限制
我的许多观点都获取外部资源。我想确保在重负载下我不会炸毁远程站点(和/或被禁止)。
我只有 1 个履带,所以有一个中央锁就可以了。
所以细节:我希望每秒最多允许对主机进行 3 个查询,并且让其余的块最多 15 秒。我怎么能(轻松)做到这一点?
一些想法:
- 使用 django 缓存
- 似乎只有 1 秒的分辨率
- 使用基于文件的信号量
- 容易为并发做锁。不知道如何确保每秒只进行 3 次提取。
- 使用一些共享内存状态
- 我宁愿不安装更多的东西,但如果我必须的话。
mutex - 获取互斥锁列表?
程序在其启动过程中创建互斥锁。我不知道这个互斥锁的格式,所以我想知道是否有办法获取所有非废弃互斥锁的列表,打开程序,获取一个新列表,看看是否可以通过删除所有重复条目找到互斥锁.
有没有办法得到这个列表?
c++ - 在逗号运算符的 LHS 中初始化匿名互斥锁持有类实例
假设我有这样的代码:
如果函数test_raiicomma_1
() 是从多个线程调用的,它会锁定一个互斥体以防止任何其他线程同时调用Func()
。互斥体在构造变量时被锁定,mut1_lock
在超出范围并被破坏时释放。
这工作得很好,但作为一种风格,需要为持有锁的临时对象命名让我很恼火。该函数test_raiicomma_2()
试图通过初始化锁对象并Func()
在一个表达式中调用该函数来避免这种情况。
直到表达式结束才调用临时对象析构函数是否正确, afterFunc()
已返回?(如果是这样,你认为使用这个成语是否值得,或者在单独的语句中声明锁总是更清楚?)
如果该函数test_raiicomma_3()
需要锁定两个互斥锁,那么互斥锁在调用之前会按顺序锁定Func()
,然后释放,但不幸的是可能会以任一顺序释放,这是否正确?
c# - 我怎样才能有许多线程需要知道下一个要处理的 ID,然后安全地增加该数字?
我正在开发一个有一堆线程处理数据的程序。
每个线程都需要获取下一个可用 ID,为下一个线程将该 ID 加 1,并以线程安全的方式执行此操作。
这是我会使用互斥锁的实例吗?我应该改用 Queue.Synchronized 并用所有 300,000 个 ID 填充它还是这是不必要的?
我是否应该只有一个整数并以某种方式锁定该数字的检索和更新,以便 thread1 进入,获取“20”作为下一个 ID,然后在另一个线程等待时将其增加到“21”?
这个用例的最佳实践是什么?