问题标签 [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.
cuda - 在 CUDA 中调用 __syncthreads() 函数的位置
我有一些布尔变量,我的每个线程都必须使用它,所以我需要同步它们,这意味着我需要__syncthreads()
在我的程序中调用函数,但我不知道在哪里调用它。
java - 回调中的 notify() 未发出 wait() 信号
问题很简单。在 Android 上,我有一个需要调用库函数的方法。该呼叫将发出我必须处理的回调信号。在我从我的方法返回之前,我必须等待该回调发出信号。
我认为监视器对象上的 wait() 和 notify() 方法可以解决问题。它不是。
基本上监控对象被调用Connection
,我在调用方法中实例化。然后该方法执行一个循环,在该循环中它调用一个 Android 库方法来“取消注册”一个对象。不幸的是,对这个方法的响应是在一些回调中给出的。所以我使用该Connection.wait(10000)
方法来等待回调,并在回调中使用connection.notify()
它来发出信号何时完成(当然,所有同步)。但是,connection.notify()
不会发布connection.wait(10000)
. 我可以从 Android logcat 中看到注销成功但我总是必须等待 10 秒才能尝试下一个注销任务。
调用方法和回调的代码如下。我在推理中做出了多么愚蠢的假设,即这失败了。据我所见,调用方法(线程)肯定拥有监视对象并将其交给connection.wait(10000)
!
也许我对这个问题使用了完全错误的方法?(我想要的是在所有注销完成之前阻止调用者的方法。)
回调如下,它与上面的方法在同一个类中,但它是 Android 中非常流行的“onSomeEvent()”之一:
multithreading - 使用 WINAPI 同步线程
我只想将线程与 WINAPI 调用同步,但没有成功。情况是在我的 WNDPROC 收到消息后立即记录带有时间和日期的活动。问题是我的 WNDPROC 需要写入日志,因为写入文件需要时间,所以它会失控。我试图在 WNDPROC 启动后立即进入临界区,并在写入日志完成后立即离开临界区,但没有运气。怎么能让他们互相等待?
c - C原子操作,如果写入都是原子交换,我需要原子加载吗?
我正在用 C 语言编写一个程序。为了简单起见:有几个变量可供许多线程读写。每次写入其中一个时,它都会通过原子交换(GCC 原子操作、同步和交换)写入。每次读取其中一个变量时是否需要使用原子负载,或者原子写入是否足以避免在写入过程中读取数据?
请注意,任何需要使用这些变量之一的数据的地方首先复制该值:
我的问题不是关于数据竞赛,我不担心我可能会丢失数据。我担心 shared_x 的值可能会在我阅读的过程中发生变化。假设它是一个 8 字节整数,这是否是一个潜在的问题:假设 shared_x 是一个 64 位整数,8 字节。我的 x = shared_x 是否有可能复制前 4 个字节,然后以原子方式写入 shared_x,然后该语句完成读取第二个 4 个字节。这将导致 x 包含 shared_x 的旧值的前 4 个字节,以及新 shared_x 的最后 4 个字节。我怀疑原子交换中的内存屏障(http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Atomic-Builtins.html - 使用__sync_bool_compare_and_swap)足以防止这种情况......但我我不确定。
c# - 来自具有特定延迟的线程的方法调用
我需要同步一个方法调用,以便线程可以在 500 毫秒睡眠后调用这个方法。我有 10 个可能同时运行的线程,所以简单地引入Thread.Sleep(500)
并没有帮助。我怎样才能以最简单的方式实现这一目标?你有什么建议?
c++ - 发出特定事件信号时立即退出正在运行的线程
考虑以下线程函数:
这个线程是由我的应用程序中的一个对话框创建的。该线程将在对话框的生命周期中只运行一次(它是一个工作线程)。
在发生一些异步事件(可能是单击按钮,发出其他事件等)时,我想通知该线程立即返回,以便我的对话框可以正常退出(在等待该线程终止之后)。我不能只退出对话框,因为该线程仍将运行。
我对 C++ 比较陌生,这就是我所想到的(伪代码):
- 将线程函数包围在
try-catch
. - 在发生该异步事件时,引发线程终止异常。
这没有用,所以我进行了一些研究,并找到了与此类似的答案。但出于某种原因,我觉得有一种更简单的方法可以实现这一点。在我开始实施上述想法之前,我只是想澄清一下。
谢谢!
c++ - 这在多线程环境中会不会产生干扰?
这是否会成为数据竞争条件,尤其是在关键部分之外处理“ while (i < dq->size()) ”时?我的方法正确吗?否则请建议我。
android - 同步执行功能
我有一些功能必须同步实现 3 秒。我使用 soundpool、振动模式和背景动画播放声音。他们三个分别工作正常。但我无法正确安排它们的时间,以便所有人一起开始。
这 3 个函数需要在每 15 秒后重复调用一次。并将在单击按钮时停止。我尝试使用类似的东西,但它不能正常工作。
这是正确的方法吗?还是有其他方法?
c++ - 通过事件进行线程同步的开销
我目前正在试验多线程同步。对于背景,我有一组大约 100000 个对象 - 可能更多 - 我想以不同的方式每秒处理多次。
现在最关心我的是同步的性能。
这是我认为应该可以正常工作的(我省略了所有安全方面,因为这只是一个测试程序,如果出现错误,程序只会崩溃..)。我写了两个函数,第一个由程序的主线程执行,第二个由所有附加线程运行。
为了指出我的要求,我只给你一个小例子:假设我们从上面得到 100000 个对象,分成 8 个子集,每个子集 12500 个对象,一个具有 8 个逻辑内核的现代多核处理器。相关部分是时间。所有任务必须在大约 8ms 内完成。
我现在的问题是,我能否从拆分处理中获得显着的时间提升,或者通过事件进行同步是否过于昂贵?或者如果所有任务都需要以这种方式完成,是否还有另一种方式可以以更少的努力或处理时间来同步线程?
c# - 获取多线程以在网页和业务层之间进行同步
我在让这段代码工作时遇到问题(对不起,长度)。代码经过消毒,仅显示诊断问题的相关部分。
从控制台应用程序运行时它工作正常。但是,当从 ASP.NET 应用程序调用 Utlities.SendBulkEmail 时,BulkEmailCompleted例程永远不会触发,并且正是这个例程增加了 m_CompletedWorkers 计数器。
如何重构 SendBulkEmail 例程以使用 AsyncOperationManager 而不是 BackgroundWorker,因此我可以保证返回结果的线程。
SendBulkEmail 例程本身不是多线程的。多线程发生在其 foreach 循环内。
我认为原始代码的基础是从这个网站获得的:http: //www.dotnetfunda.com/articles/article613-background-processes-in-asp-net-web-applications.aspx
Utilities 项目在各种解决方案之间共享,并且几乎是独立的。
我希望我能说清楚。
任何帮助将不胜感激。
代码如下: