问题标签 [thread-synchronization]
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# - .NET EventWaitHandle 慢
我正在使用带有回调函数的waveOutWrite,并且在本机代码下一切都很快。在 .NET 下它要慢得多,以至于我认为我做错了什么,有时慢 5 到 10 倍。
我可以发布两组代码,但似乎太多了,所以我只发布速度很快的 C 代码并指出 .NET 代码中的微小差异。
C 代码的 times[] 数组的值总是在 80 左右,这是我正在使用的 PCM 缓冲区长度。.NET 代码有时也会显示类似的值,但有时会显示高达 1000 的值,更常见的是 300 到 500 范围内的值。
在 OnWaveOut 回调中执行底部循环中的部分而不是使用事件,使用 .NET 或本机代码使其始终保持快速。因此,问题似乎仅与 .NET 中的等待事件有关,并且主要仅在测试 PC 上发生“其他事情”时——但不是很多事情,可以像移动窗口或打开一样简单我电脑里的一个文件夹。
也许 .NET 事件对于上下文切换或 .NET 应用程序/线程一般来说真的很糟糕?在我用来测试我的 .NET 代码的应用程序中,代码只是在表单的构造函数中运行(添加测试代码的容易的地方),而不是在线程池线程或任何东西上。
我还尝试使用接收事件而不是函数回调的 waveOutOpen 版本。这在 .NET 中也很慢,但在 C 中则不然,因此,它再次指出了事件和/或上下文切换的问题。
我试图让我的代码保持简单,并设置一个事件来完成回调之外的工作是我可以用我的整体设计做到这一点的最佳方式。实际上只使用事件驱动的 waveOut 更好,但我尝试了另一种方法,因为直接回调很快,而且我没想到正常的事件等待句柄会这么慢。
c++ - 与锁相比,原子/互锁变量有多快,无论是否存在争用?
std::atomic<T>
与无争议的原子变量(例如C++)操作相比,它快/慢多少。
另外,有争议的原子变量相对于无争议的锁要慢多少?
我正在研究的架构是 x86-64。
java - Java 中的同步是如何工作的?
我对 Java Synchronization 有疑问。我想知道我的类中是否有三个同步方法,并且一个线程在一个同步方法中获得锁定,另外两个将被锁定?我问这个问题是因为我对以下陈述感到困惑。
当线程位于对象的同步方法中时,所有其他希望执行此同步方法或对象的任何其他同步方法的线程都必须等待。此限制不适用于已经拥有锁并正在执行对象的同步方法的线程。这样的方法可以调用对象的其他同步方法而不会被阻塞。对象的非同步方法当然可以随时被任何线程调用
c - C:thread_mutex 同步
我遇到了多线程同步的问题,我将只发布一个我正在做的“尝试”同步的示例,因为原始代码更大。基本上我有一个附加了 3 个线程的繁重进程,为了锁定/解锁线程,我使用修改每个线程中互斥状态的函数。像这样的东西:
执行代码后我得到的是:
。/测试
袜子:9
显然我有一些概念错误,但我找不到问题。线程不应该用 unlock() 解锁?为什么我在解锁调用之前使用 sleep(2) 时程序可以工作?我应该使用哪种方式来避免问题?每个代码都在单独的文件中。
提前致谢!PS:对不起我蹩脚的英语!
c++ - Qt中两个线程之间的事件同步
我有两个线程,假设线程“A”和线程“B”。线程“A”发布自定义QEvent到线程“B”,然后它应该等到线程“B”处理这个事件。
到目前为止我做了什么:
我的活动课程:
我的线程“A”:
我的线程“B”:处理接收到的事件并销毁它。~IPCMessageEvent析构函数被调用,因此wakeOne()
将为recvCondition
in 线程“A”启动。
一切似乎都很好,这只是一件事!看起来有时~IPCMessageEvent的调用时间比预期的要早...
所以我的recvCondition.wait(&mutex, IPC_MESSAGE_WAIT_TIMEOUT);
将被锁定并会达到超时。
还有其他方法可以进行这种同步吗?或者也许有人对如何解决/克服这个问题有任何建议?
eclipse - Eclipse RCP——如何使用线程使用(等待和通知)执行暂停/恢复按钮功能
问题陈述: -
我有一个 UI 按钮“执行”——它将在不同的线程中依次启动一个大的后台进程。一旦进程开始,按钮文本将切换到“暂停”现在按下“暂停”,我需要暂停线程执行,“恢复”最终会通知继续。
按下按钮“执行”,线程开始,按钮切换到“暂停”,如果我按下暂停,线程被暂停。但我无法恢复正在运行的线程。如果我在恢复按钮按下事件中检查线程状态,我得到 value=0 相当于 NONe。请帮忙。以下是我的代码....
块引用
c# - 如何在不使用 TaskCreationOptions.AttachedToParent 的情况下等待所有任务(创建的任务和子任务)
我将不得不创建一个创建多个任务的并发软件,每个任务都可以生成另一个任务(也可以生成另一个任务,...)。
我需要调用阻塞启动任务的方法:在所有任务和子任务完成之前不返回。
我知道有这个TaskCreationOptions.AttachedToParent
属性,但我认为它不适合:
服务器至少有8个核心,每个任务会创建2-3个子任务,所以如果我设置AttachedToParent
选项,我的印象是第二个子任务不会在第一个子任务的三个任务之前启动结束。所以我将在这里进行有限的多任务处理。
所以有了这个进程树:
我的印象是,如果我每次启动线程时都设置 AttachedToParent 属性,B 不会在 E、F、G 完成之前结束,所以 C 将在 B 完成之前开始,我将只有 3 个活动线程而不是 8 个我可以有。
如果我不放置 AttachedToParent 属性,A 将很快完成并返回。
那么,如果我不设置此选项,我该如何确保我的 8 个内核始终得到充分利用呢?
c# - 阻塞函数并等待事件 C#
我想阻止一个函数并等待一个事件然后继续,在我的情况下,当我单击一个按钮时我想要拥有的伪代码:
- 弹出消息框
- 等待datagridview中的事件点击
- 弹出消息框2
- 等待datagridview中的事件点击
- 弹出一个是/否消息框
- 执行另一个函数
但实际代码不会等待 autoevent.Set() 函数,因此当我想阻塞主函数时,线程调用的函数仍然被阻塞。
我尝试了 ManualResetEvent 和 AutoResetEvent,这是我用于 AutoResetEvent 的代码:
提前致谢
java - 在使用双锁时使单例实例易失有什么意义?
在使用双锁方法进行同步的单例中,为什么将单个实例声明为 volatile ?我可以在不将其声明为 volatile 的情况下实现相同的功能吗?
java - java中同步块的替代方案
startTime
我使用以下代码只设置一次保证变量:
我将通过此代码保证只为任意数量的调用process
方法调用实例化一次变量。
我的问题是:
我的代码是否有更简洁的替代方法?(用于示例删除if
和synchronized
语句)