问题标签 [concurrent-programming]

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 投票
2 回答
4886 浏览

go - 所有的 goroutine 都在休眠 - 死锁! - - - - 错误

我想编写三个并发的 go 例程,它们相互发送整数。现在,我的代码已正确编译,但是在第一次执行后,它给出了错误“所有 goroutines 都在睡觉 - 死锁!”。我试图找到错误,但我无法在代码逻辑中找到任何错误。任何人都可以帮助我找到我的代码中的错误。我的代码如下。提前致谢。

谁能告诉我为什么如果我将 Routine2 和 Routine3 声明为 goroutine,为什么输出是 [无输出]。我是 GO 的新手,据我从“ http://golang.org/doc/effective_go.html#concurrency ”了解,go 用于在同一地址空间中与其他 goroutine 并行执行 goroutine。那么,问题是什么,所有例程都在运行但输出是[无输出]。

为了使程序更清晰:实际上我很累做的是在每两个例程之间创建两个通道,然后使用一个通道将 int 发送到另一个通道并通过另一个通道从该例程接收 int。例如,例程 1 和 3 之间的通道是命令 13 和响应 13。例程 1 使用 command13 向例程 3 发送 int 和 response13 来接收 int。对于例程 3,response13 用于向例程 1 发送 int,而 command13 用于从例程 1 接收 int(命令/响应 13 代表例程 1 和 3 之间的通道)。现在,由于三个例程是并发的,并且它们具有特定的例程来处理接收到的 msg 或发送 msg,为什么它们会陷入死锁?

0 投票
2 回答
553 浏览

go - 抛出所有 goroutines 都睡着了 - 死锁!-------- Google GO 中的错误

我想编写三个并发的 go 例程,它们相互发送整数。现在,我的代码已正确编译,但是在第一次执行后它给出了错误“抛出:所有 goroutines 都处于睡眠状态 - 死锁!”。我试图找到错误,但我无法在代码逻辑中找到任何错误。任何人都可以帮助我找到我的代码中的错误。我的代码如下。

0 投票
8 回答
14331 浏览

java - 如何在 Java 中实现二进制信号量类?

我可以看到如何在 Java 中实现“标准”信号量类。但是,我看不到如何在 Java 中实现二进制信号量类。这种实施如何运作?我应该什么时候调用唤醒和通知方法来唤醒和停止信号量上的线程?我了解二进制信号量是什么,但我不知道如何对它们进行编码。

编辑说明:意识到我说的是“BINARY”信号量类。我已经做过的标准信号量类,我知道它是正确的,所以标准信号量类对我不感兴趣。

0 投票
6 回答
1165 浏览

concurrency - Go 编程语言相互并发执行

我有两个并发的 go 例程,如下所示,

是否可以通过使用一些内置函数来实现临界区?

0 投票
4 回答
15189 浏览

java - 如何使用信号量解决生产者-消费者问题?

我需要编写一个类似于生产者-消费者的问题,必须使用信号量。我尝试了几种解决方案,但都没有奏效。首先,我在 Wikipedia 上尝试了一个解决方案,但没有奏效。我当前的代码是这样的:

消费者的方法运行:

生产者的方法运行:

在上面的代码中,消费者线程读取了一个位置,然后另一个线程读取了相同的位置,而没有生产者填充该位置,如下所示:

0 投票
1 回答
321 浏览

go - 相互并发的 Go 例程中的死锁错误

我有三个并发的 go 例程,如下所示,

这个逻辑代码每次都会出现死锁情况。实际上,当它运行时,只需执行例程1的打印语句(*标记之间的语句)多次(尽管我的打印语句只有一个)并给出死锁错误。谁能告诉我代码逻辑有什么问题。谢谢。

注意。有关更多信息,可以在此处找到代码http://play.golang.org/p/pW6aXryUaK,其中仅执行第 290 行。没有错误的原始代码可以在这里找到 play.golang.org/p/UL3rj8DJRk。我只是为他们添加锁定和解锁。谢谢。

我想补充一点:在 play.golang.org/p/UL3rj8DJRk 的代码中,您可以找到各种打印语句的输出,如下所示:process [number] 在 [time nano seconds] 发送 [int] to process [number] ]。但是,由于三个并发例程的结果,有时打印语句没有正确执行(意味着没有打印整个,有一些东西被另一个打印插入,例如进程 [number] 发送 [int] 到进程 [number] 处的进程 [number] ])。任何机构都可以帮我解决这个问题吗?

0 投票
2 回答
254 浏览

concurrency - 并发 Go 例程的相互执行问题

在我的代码中有三个并发例程。我尝试简要概述我的代码,

我想要这样,当两个之间的代码做某事(两个星号之间的代码)正在执行时,控制流不能转到其他 go 例程。例如,当routine1正在执行两颗星之间的事件(发送和打印事件)时,必须阻塞例程2和3(意味着执行流程不会从例程1转到例程2或3)。完成最后一个打印事件后,执行流程可能会传递给例程 2 或 3。任何人都可以通过指定来帮助我,我该如何实现?是否可以通过 WaitGroup 实现上述规范?任何人都可以通过给出一个简单的例子来告诉我如何使用 WaitGroup 来实现上述指定的例子。谢谢。

注意:可能这是重复的问题。但是,我尝试使用该同步锁定机制,这可能是因为我的代码很大,这就是为什么我无法正确放置锁定解锁的原因,并且它正在造成死锁情况(或者可能是我的方法产生错误)。任何人都可以通过一个简单的程序帮助我,这样我就可以做到这一点。我在这里给出了我的代码的一个简单示例,在这里我想在互斥锁中放置两个打印和发送事件(对于例程 1),因此例程 2 不能中断它。你能帮助我怎么可能。给出了一种可能的解决方案, http ://play.golang.org/p/-uoQSqBJKS给出了错误。

0 投票
5 回答
1251 浏览

boost - 深入使用无锁编程的高级抽象不流行的原因是什么?

从我在无锁编程中收集到的信息来看,要正确地做是非常困难的……我同意。光是想一些问题就头疼。但我想知道的是,为什么没有广泛使用高级包装器(例如无锁队列和类似的东西)?例如 boost 没有无锁库,尽管据我所知有人建议。我的意思是我猜有很多应用程序无法避免关键部分是负载的很大一部分这一事实。那么有哪些原因呢?是吗...

  1. 专利 - 我听说一些与无锁编程相关的东西获得了专利。
  2. 表现。
  3. 谷歌和微软都有这样的内部库,但没有一个是公开的......
  4. 还有什么?

所以我的问题是:为什么使用无锁编程的高级抽象不是很流行,而同时“常规”多线程编程是“in”?

编辑:boost 有一个无锁库 :)

0 投票
1 回答
852 浏览

ios - 我如何知道哪个 ViewController 处于活动状态?

我正在使用 NSOperationQueue 下载图像。

图像下载完成后,我想调用reloadView视图控制器的方法。

但是,当下载正在进行时,用户很有可能已经移动到不同的视图。这个另一个视图也将有一个reloadView方法(例如,第一个视图显示下载的图像总数,第二个显示下载图像的缩略图)

基本上我想要的是每当图像下载完成时,我应该能够调用reloadView活动视图控制器的方法,无论它是什么?

这怎么可能?

0 投票
1 回答
5962 浏览

c++ - MSVC的并发运行时parallel_for_each和parallel_for有什么区别?

parallel_for_each形式为:

parallel_for也是类似的形式:

那么多核编程中使用的算法Concurrency::parallel_for和算法有什么区别?Concurrency::parallel_for_each