问题标签 [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 投票
1 回答
644 浏览

deadlock - 并发处理 - 彼得森算法

对于不熟悉的人,以下是用于流程协调的 Peterson 算法:

我的问题是,这个算法会导致死锁吗?

0 投票
2 回答
2790 浏览

c# - 将字典重构为 ConcurrentDictionary

我想让我的代码具有多线程可读性,因此我需要将 Dictionary 更改为 ConcurrentDictionary。我阅读了有关 ConcurrentDictionary 的信息,查看了一些示例,但我仍然需要对此有所帮助:

这是原始代码(用于单线程)

这是我想出的:

我不太确定是不是这样,特别是我很确定 IsEmpty 检查不是线程安全的,因为它_tasks可能已在IsEmpty检查和&& ...部件或return _tasks部件之间初始化。我必须手动锁定这张支票吗?我需要双锁(空检查>锁定>空检查)吗?

0 投票
2 回答
2219 浏览

c# - 在同一个 Stream 上启动多个异步读/写操作会破坏数据吗?

我正在使用异步 I/O,因为它不会阻塞调用线程并在幕后进行线程处理。如果我在同一个 Stream 上调用多个异步操作,如 BeginWrite(),我是否需要担心数据缓冲区内容混合在一起?

假设我要发送 3 个缓冲区:

我不介意缓冲区是否以错误的顺序发送,所以

没问题,但是缓冲区内容是否有可能完全混合在一起?

PS:我100%确定有人已经以某种形式提出过这个问题......

0 投票
3 回答
1996 浏览

c++ - WaitForMultipleObjects 失败 C++

我目前正在编写一个程序,该程序将同时运行多个程序组,并单独运行其他程序。

if( WAIT_FAILED == WaitForMultipleObjects(numberOfProgramsRan, &information[i].hProcess, TRUE, INFINITE) ) { wcerr << L"Failure waiting for process" << endl; }

numberOfProgramsRan是我在循环中运行的程序数。 &information[i]vector从创建过程中保存我的过程信息

当我在 for 循环中创建进程时,如果创建了两个或更少的进程(因此两个程序被传入运行),我的程序将等待它运行我的下一个进程。如果创建两个以上的进程(或在我的向量中传递两个以上的程序),我WaitForMultipleObjects会失败。

如果我需要进一步解释我的问题,请告诉我。

谢谢你的帮助

0 投票
2 回答
2097 浏览

python - Stackless Python - for 循环中的递归?

我对编程还很陌生,而且我已经使用 Python 工作了几个月了。我试图让一个概念与 Stackless 一起工作,但就是不知道如何(尽管我已经编写了其他与 Stackless 一起工作的测试脚本)。

Anywho,作为一个简单的例子,考虑下面的代码,它遍历一个列表并通过递归调用相同的函数来找到它的所有排列(编辑:n 维笛卡尔积)。

产生:

到目前为止,我发现的 Stackless 和递归的唯一示例似乎是函数在完成后在函数末尾发送信息。永远不要在 for 循环的中间,就像上面所说的那样。

我该怎么做?我如何将它变成一个可以使用 tasklet 而不是递归函数运行的脚本?(这个版本是我能想到的最好的版本,但无论我怎么安排都失败了。这是许多尝试中的一个,我不妨在这一点上把意大利面扔到墙上。)

奖励 e-cookie 用于在没有bounceBack 功能的情况下执行此操作 - 我还没有找到一种方法让单个 tasklet 在没有一个的情况下多次将信息传递给它自己。

谢谢你的时间!

0 投票
2 回答
3974 浏览

java - Java RMI:并发支持

我正在开发一款具有 P2P 架构的多人纸牌游戏,这不是我的决定,该项目是由我所在大学的分布式系统课程教授委托的。

教授施加的另一个约束是使用Java RMI技术来实现玩家之间的通信层。

我会知道 Java RMI 是否“开箱即用”地管理并发,换句话说,我会知道当我在远程对象上调用方法时,该对象是否自动“锁定”并且没有对象可以同时调用相同的方法。

可以将方法声明为同步是一个好的解决方案吗?

谢谢

0 投票
4 回答
4025 浏览

java - 获取使用指定 Runnable 运行的所有线程

我有一个 Runnable 被多个线程使用:

如何获取使用创建的所有线程myRunnable

(当然这个例子是简化的。我myRunnable在不同类的几个地方创建了新线程。)

用例(根据要求):MyWorkerOfMyPage是绑定到页面的延迟工作人员。如果用户离开这个页面(例如通过导航到另一个页面),所有属于的线程都MyWorkerOfMyPage应该被粗暴地杀死,因为不再需要它们的结果。

0 投票
1 回答
302 浏览

java - 在 JVM 中操作线程实现

最近,我一直致力于将并发对象部署到多核上。在一个示例中,我使用了BlockingQueue.take()方法,其规范中提到它是阻塞的。这意味着该方法不会释放封闭线程的资源,以便可以将其重新用于其他并发任务。这很有用,因为 JVM 实例中的活动线程总数是有限的,如果应用程序需要数千个活动线程,那么能够重用挂起的线程至关重要。另一方面,JVM 在 Java 中使用从应用程序级线程到操作系统级线程的 1:1 映射;即每个Java Thread 实例都成为一个底层操作系统级线程。

当前的解决方案基于java.util.concurrencyJava 1.5+。尽管如此,我们仍需要可扩展到大量的工作线程。现在,我有兴趣找到以下答案:

  • 有什么方法可以替换java.lang.ThreadJVM 中的实现,以便我可以插入自己的 Thread 实现?
  • 这是否只能通过调整 JVM 中线程实现的 C++ 部分并重新编译来实现?
  • 是否有任何库可以提供一种方法来替换 Java 中的经典线程?
  • 同样,在同一行中,是否有一个库或一种方法来指导Java 中的某些线程如何映射到操作系统级别的一个线程?

我还发现讨论了 JVM 的不同实现,我不确定它们是否有帮助。

提前感谢您的意见和想法。

0 投票
3 回答
6625 浏览

c++ - boost asio 异步等待条件变量

是否可以对 boost::asio 中的条件变量执行异步等待(读取:非阻塞)?如果不直接支持任何有关实施的提示,将不胜感激。

我甚至可以每隔几毫秒实现一个计时器并触发一次唤醒,但这种方法要差得多,我很难相信条件变量同步没有实现/记录。

0 投票
5 回答
815 浏览

c# - List的线程安全有一个作家,没有枚举器

在浏览一些数据库代码以寻找与此问题无关的错误时,我注意到在某些地方List<T>使用不当。具体来说:

  1. 有许多线程同时访问Listas 阅读器,但使用索引list不是enumerators.
  2. 有一个作家list
  3. 同步为零,读取器和写入器同时访问list,但由于代码结构,在执行返回的方法之前永远不会访问最后一个元素。Add()
  4. 从未从list.

根据C#文档,这不应该是线程安全的。然而它从未失败过。我想知道,由于List(我在内部假设它是一个在空间不足时重新分配的数组)的特定实现,它是 1-writer 0-enumerator n-reader add-only 场景意外线程安全,还是有一些不太可能的情况在当前的.NET4实现中发生这种情况?

编辑:重要细节我遗漏了一些回复。读者将List其及其内容视为只读。