问题标签 [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.

0 投票
1 回答
170 浏览

c++ - 立即终止线程

我已经实现了一个并行运行的线程。我想要的是,每当用户按下一个按钮,比如“p”,线程应该立即停止。

我的代码是:

发生的事情是,每当我尝试通过按“p”来中断时,屏幕上都会充满“在 while 循环中”,它会连续显示,然后在 3-4 秒停止。之后既不显示“处理程序退出”,也不显示调用了 rrscheduler。此外,同时显示“在 while 循环中”,还显示了来自 timer() 函数的语句。

我的问题是: 1.
我怎样才能使线程立即完成执行
2.为什么在我们退出 while 循环后(在 b 为真之后)主中的 rrscheduler 没有执行?

0 投票
3 回答
8079 浏览

java - 方法同步与对象同步有什么不同?

可能重复:
同步块与同步方法?

如果有人可以帮助我提供有关方法同步与对象同步之间有什么不同的真实示例,那就太好了。

方法同步示例

对象同步示例

0 投票
2 回答
4458 浏览

c# - Interlocked.Exchange 和 Volatile.Write 之间的区别?

Interlocked.Exchange和 和有什么不一样Volatile.Write

这两种方法都会更新某些变量的值。有人可以总结一下何时使用它们吗?

特别是我需要更新double我的数组的项目,我希望另一个线程看到最新的值。什么是首选?Interlocked.Exchange(ref arr[3], myValue)Volatile.Write(ref arr[3], info);在哪里arr声明为double


真实的例子,我这double​​样声明数组:

在一个线程中,我像这样更新它:

在另一个线程中,我像这样读取了这个数组:

对我来说,它按原样工作得很好。但是,为了确保“它始终有效”,无论我应该添加什么Volatile.WriteInterlocked.Exchange. 因为不保证双重更新是原子的。

在回答这个问题时,我想查看VolatileInterlocked类的详细比较。为什么我们需要 2 个类?哪一个以及何时使用?


另一个例子,来自生产项目中锁定机制的实现:

Release1如果此 API 的用户调用或方法,是否有任何实际区别Release2

0 投票
2 回答
156 浏览

multithreading - 同时执行多个线程周期的并发编程?

我想知道是否有人知道并发(即多线程、并行等)编程语言的设置使得各个线程不会仅仅因为操作系统未能为它们提供 CPU 时间而彼此落后。我什至不确定装配是否可以避免这种情况。:P 但显然,我不确定,因此提出了这个问题。

我并不是说程序需要实时访问 CPU 周期,而是说线程不应该不同步。此外,如果该语言编译为二进制可执行文件而不是字节码,或者只是由解释器运行,那将是非常好的。

0 投票
2 回答
1292 浏览

java - 如何使用来自另一个线程的服务器更新 java swing gui?

我有这个 Java Swing 应用程序,每次传入客户端尝试建立连接时,它都会启动一个新线程,该线程使用执行程序池打开套接字服务器。

该应用程序需要两个按钮,一个用于启动,另一个用于停止服务器。我想要的是显示服务器状态,并禁用相反的按钮,直到其状态改变。

这就是我现在所拥有的,但我不知道当线程停止时如何与 EDT 通信。我能做的就是检查isRunning()方法。

使用 SwingWorker 会更好吗?

这就是我在 GUI 线程中的内容:我只使用一个按钮并在每次按下它时更改其文本,但如果服务器由于某种原因断开连接,则按钮保持不变。

欢迎任何帮助!谢谢。

0 投票
1 回答
424 浏览

java - Android 游戏开发 - BOT 玩家使用线程和 AndEngine 配置

我正在编写我的第一个 Android 游戏。
这是一个简单的纸牌游戏,玩家将拥有 3 个 BOT 玩家。

现在我正在用纯java为它编写一个核心逻辑。(还没有过多考虑 AndEngine 和图形)

游戏分为两个阶段:

  1. 最初所有玩家都会异步抽牌
  2. 在第一阶段之后,控制从一个玩家连续(同步)移动到下一个玩家以抽一张牌。

所以,我很困惑我需要多少线程?

我应该把每个玩家放到一个单独的线程中吗?(因为第一阶段可能需要它)
或者
我应该在一个线程中执行这个?(如在阶段 2 中需要同步行为)

如果我将每个播放器放入不同的线程中,我如何序列化这些线程以执行顺序任务(第 2 阶段-控制一个接一个地移动到播放器)????


现在我写的逻辑是纯java。使用 AndEngine 配置它时会给我带来任何麻烦吗?我的意思是在ANdEngine中有处理输入和使用这个逻辑的任何特定格式吗?它只是调用这些类的方法来开始游戏并在游戏上执行任何操作。

0 投票
2 回答
2246 浏览

java - 在其他线程完成后调度周期性任务

我想让 3 个线程同时执行一项任务,并且我想要一个线程在一段时间内执行计划任务(每 10 秒运行一次)。但是我希望当 3 个线程完成时只运行一次计划任务,然后我希望这个线程终止。实现这些线程的最佳方法是什么?ExecutorService 接口是否适合这个。

0 投票
2 回答
98 浏览

java - 访问被其他线程修改的 Set

ExecutorService3 个线程,每个线程将Pair<String,Integer>对象添加到TreeSet<Pair<String,Integer>>. 声明了 addToSet() 方法synchronized,一切正常。但是我必须实现一个新线程来执行一个计划任务,该任务必须访问这个 Set 并打印所有值。问题是有时计划的线程会崩溃(其他线程工作正常)。我认为它崩溃是因为在打印机的 for 循环(计划线程)期间其他 3 个线程正在修改 Set。

0 投票
3 回答
3130 浏览

c# - Console.writeline() 多线程问题

我正在尝试模拟聊天客户端。首先是代码

好的,所以这个程序会自动在控制台上打印一些文本,我也可以在屏幕上写我的信息。现在的问题是,每当我输入一个长句子时,任何需要超过 4 秒才能输入的内容。然后,它不会在下一行打印自动消息,而是附加到我正在输入的任何内容。我对多线程真的很陌生,所以我不确定是什么问题。我认为两个线程都使用相同的控制台类。

在这方面的帮助将不胜感激。

0 投票
3 回答
50348 浏览

multithreading - Spring @Async 限制线程数

我的问题与这个问题非常相似:@Async prevent a thread to continue until other thread has done

基本上我需要在更多线程中运行〜数百次计算。我只想运行一定数量的并行线程,例如并行运行 5 个线程和 5 个计算。

我正在使用 spring 框架,@Async 选项是自然的选择。我不需要功能齐全的 JMS 队列,这对我来说有点开销。

有任何想法吗 ?谢谢