问题标签 [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++ - 使用 pthread 来利用多个内核的问题
我正在使用 SDL 和 Pthread 用 C++ 开发光线追踪器。我在使我的程序使用两个内核时遇到问题。线程可以工作,但它们不会 100% 使用两个内核。为了接口 SDL,我直接写入它的内存 SDL_Surface.pixels,所以我认为它不可能是 SDL 锁定我。
我的线程函数如下所示:
注意:scene->renderPixel 是 const,所以我假设两个线程都可以从同一个内存中读取。我有两个工作线程在做这件事,在我的主循环中我使用:
注意:我也尝试过创建和加入线程而不是同步它们。我用“-lpthread -D_POSIX_PTHREAD_SEMANTICS -pthread”编译它,gcc 没有抱怨。
我的问题最好使用执行期间的 CPU 使用图来说明:(
来源:jopsen.dk)
从图中可以看出,我的程序一次只使用一个内核,然后每隔一段时间在两者之间切换,但它永远不会将两者都驱动到 100%。我到底做错了什么?我没有在场景中使用任何互斥锁或信号量。我该怎么做才能找到错误?
此外,如果我将 while(true) 放在 scene->renderPixel() 周围,我可以将两个核心都推到 100%。所以我怀疑这是由开销引起的,但我只每 0.5 秒同步一次(例如 FPS:0.5),给定一个复杂的场景。我意识到告诉我我的错误可能并不容易,但是调试它的方法也很棒......我以前没有玩过pthreads......
另外,这可能是硬件或内核问题,我的内核是:
笔记:
java - Java 中的互斥量和信号量是什么?主要区别是什么?
Java 中的互斥量和信号量是什么?主要区别是什么?
c# - 使用 Mutex 运行应用程序的单个实例
为了只允许运行应用程序的单个实例,我正在使用互斥锁。代码如下。这是正确的方法吗?代码中是否有任何缺陷?
当用户第二次尝试打开应用程序时如何显示已经运行的应用程序。目前(在下面的代码中),我只是显示另一个实例已经在运行的消息。
java - 双重调用 WeakHashMap.put(..) 背后的原因是什么?
这篇博客文章演示了一种为每个字符串 id 惯用语实现互斥锁的方法。使用的 String id 用于表示 HttpSession id。
- 为什么我们需要在 Mutex 实例周围包裹一个 WeakReference ?从 String -> Mutex 创建一个 Map 不是更好吗?
为什么我们需要调用 put 两次?
/li>
c# - 非螺纹锁定互斥体
这是这个问题的一个分支,但删除了一些限制。
我有一个需要管理文件锁定的系统。我需要能够在一个线程中锁定文件(共享读锁定),然后在另一个线程中解锁。更准确地说,我无法确定它将在哪个线程中解锁,或者即使创建线程仍然存在。
我还需要排他写锁定来配合这个,但这都在同一个线程中。
.NET Mutex不起作用,因为它在创建线程退出时会做额外的事情
c# - 使用命名互斥体
我有两个运行相同 Windows 服务的实例。他们检查彼此的健康状况并报告是否发现任何问题。我有一项需要执行的关键工作,所以我使用故障转移方法运行它,它在主服务器中运行,如果主服务器没有响应,它在从服务器中运行。这项工作需要通过特定的串行端口进行通信,我正在尝试使用 Mutex 来检查竞争条件。我无法访问生产,所以在部署之前我想确保我的方法是好的。所以请建议我使用 Mutex 是否适合给定的情况。
然后在 runJobWrapper
c - 当只有一个线程写入共享变量时,我需要锁吗?
我有 2 个线程和一个共享的float
全局线程。一个线程只写入变量,而另一个只读取变量,我是否需要锁定对该变量的访问?换句话说:
我主要担心的是加载或存储不是原子的float
,这样最终会得到一个虚假的、部分更新的值。local_x
reader_thread
- 这是一个有效的担忧吗?
- 有没有另一种方法来保证没有互斥锁的原子性?
sig_atomic_t
假设它有足够的位用于我的目的,是否可以用作共享变量?
有问题的语言是使用 pthreads 的 C。
mutex - 单词“mutex”的复数形式
portmanteau mutex的正确复数形式是什么。它是互斥锁还是互斥锁?
c++ - OS X 上的奇数/错误 sem_getvalue 信号量行为
我有一些非常基本的信号量代码,在 Linux 上运行良好,但我一辈子都无法让它在 OS X 上正常运行......它返回最奇怪的结果......
在 OS X 上使用 g++ 编译它会返回以下输出:
而在 Ubuntu 上,我得到了明显更理智的结果:
我已经连续 3 个小时了,无法弄清楚为什么 OS X 会返回如此奇怪的结果......
我尝试使用文件路径作为信号量名称,但没有任何区别。
我会很感激我能得到的任何帮助。