问题标签 [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 回答
314 浏览

java - 使用Iterator和Vector的未知并发修改异常java

我不断收到并发修改异常

任何想法为什么?

当前解决方案:

0 投票
1 回答
75 浏览

design-patterns - 它是一种并发编程模式吗?

一些面向对象的设计出现在我的脑海中。它就像一个游泳池和一个工厂。

工厂创建可以在多个线程之间共享的资源。一个资源实体很昂贵,并且它的创建需要很多时间。一个资源可以同时被多个线程使用。

在我的特定情况下,资源是 SSH 连接。SSH 连接使用一个 TCP 套接字。但是一个 SSH 连接可以有多个会话。每个线程都为自己创建新会话。会话创建不需要与工厂一起工作。

多个线程可以尝试与同一个远程主机进行交互。

我为资源定义了状态:

初始化一些线程试图获得 SSH 连接,但它不存在。资源创造的过程很漫长。如果另一个线程也将尝试获取相同的资源,它会得到所需的资源正在进行中,并且第二个线程去等待通知。

free 所有会话都关闭并且没有线程使用 SSH 连接

忙 至少一个线程已经建立了 SSH 连接

关闭的 tcp 套接字被破坏

有一个资源的状态图:

  • -> 初始化 -> 忙碌 -> 空闲 -> 关闭

    空闲->忙

我阅读了有关 OOP 模式、企业应用程序模式、并发模式的书籍,但我不记得我上面描述的情况。

SSH 只是一个例子。这种模式适用于任何支持并发工作的繁重资源。当第二个线程想要创建资源但创建资源的第二个实例是无意义的。

如果是图案,那他叫什么名字?我相信这个设计已经在某个地方描述过了。

0 投票
2 回答
148 浏览

java - Java 同步方法和块

我试图更全面地理解 Java 中多个线程的同步。我理解使用 synchronized 关键字背后的高级思想,以及它如何在线程之间提供互斥。

唯一的问题是,即使您删除了使该主题比我认为需要的更混乱的 synchronized 关键字,我在网上和教科书中阅读的大多数示例仍然可以正常工作。

谁能给我一个具体的例子,说明什么时候不包括 synchronized 关键字会产生错误的结果?任何信息将不胜感激。

0 投票
1 回答
138 浏览

java - 并发编程:我应该先写一个顺序程序,然后添加线程安全吗?

我正在做一个项目,我们必须创建多个线程(实际数量将由测试人员(TA)输入)。我不仅在编程方面遇到问题,而且在设计方面也遇到了麻烦,我无法理解所有将被调用的线程以及可能导致错误的地方。该项目即将到期,所以如果它真的让我退缩,我不想浪费时间,但我想知道我是否应该编写程序,就像只有一个线程将运行并且一切都应该是顺序的,然后再稍后返回并尝试添加代码的线程安全部分?这会花费原始时间的两倍吗?

项目描述:注意:我将尽可能含糊其辞,以免违反任何荣誉准则,对不起:(

你的程序应该接受 n 个 objectA 线程、m 个 objectB 线程和 r 个 objectC

objectB 线程与 objectA 中的代码交互。objectA 线程与 objectB 和 objectC 中的代码交互 objectB 和 objectC 不直接交互,而是通过 objectA -ex 间接交互:objectB 需要来自 objectA 的东西。objectA 通过调用 objectC 获得该结果的结果

我的困惑主要源于所有这些交互都将由 m+n 个线程完成,并且在整个描述中存在各种限制,例如 objectB 可以从 objectA 请求某些内容,而 objectA 必须等待 objectC 在返回之前完成该内容它对对象B。此外,每个 objectA 线程一次只能处理来自 objectB 的一条指令,依此类推。

我只是想知道我是否编写代码使得只有1个objectA,1个objectB和1个object C,我可以回去轻松修改它,以便可以将那些1更改为m,n和r吗?

再次抱歉,如果我的描述有点混乱。

0 投票
2 回答
309 浏览

java - java多线程问题

可能重复:
Java String.equals 与 ==

我正在编写一个程序来模拟兔子和乌龟的比赛!我正在使用 getName() 来查看线程正在执行哪些对象,并在此基础上增加对象值。这是我的代码:

问题是它甚至认为它准确地检测到了线程的名称,但它从来没有进入 if 块。PS我是java多线程的新手。感谢您浏览代码。

0 投票
2 回答
1889 浏览

c# - 将 ConcurrentBag 设为可通知是否安全?

我需要将 ConcurrentBag 设置为可通知的。我需要知道它安全吗?该类的代码是

提前致谢。

0 投票
1 回答
1069 浏览

c - 在这种情况下,轻(est)重量的 GCC 内存屏障是什么?

我有以下 C 代码:

该代码不受锁保护(其他人只是读取dataindex),我想确保data[index]在更新index. 这段代码周围有其他变量的内存写入和读取,但它们并不重要,因此 GCC 可以自由地重新排序它们(我希望这样做是为了优化)。只要保证data[index]and的顺序index就足够了。应该如何a_write_memory_barrier()实施才能实现这一目标?

0 投票
1 回答
535 浏览

java - 如何在缓存中同步文件创建(不写入文件,只是创建)

我有一个存储旧文件的存储库,例如存档。
用户使用一个简单的 Web 应用程序来获取这些文件。
我在运行我的 Web 应用程序的服务器上维护一个简单的文件系统缓存。
至少它看起来很简单,而这只是一个想法:)

我需要以一种方式同步该缓存中的文件创建,即一次只允许一个线程从存档中获取相同的文件。

碰巧需要该文件的所有其他线程必须等到第一个线程完成将其写入缓存,然后从那里获取它。
起初我使用 File.exists() 方法,但这并不好,因为它在线程(锁所有者)创建一个空文件后立即返回 true(因此它可以开始从存储库流写入它)。

我不确定这是否是正确的方法,但我正在使用静态 Map(将 file_ID 映射到 syncDummyObject)来跟踪当前正在获取哪些文件。
然后我(试图)在该 syncDummyObject 上同步文件获取。

这是正确的方法吗?该代码正在运行,但在我将其投入生产之前,我需要确保它是好的。

我考虑使用暂存目录,在其中创建文件并在完成后将它们传输到缓存中,但这会带来另一组问题......

为了更好的可读性,我删除了错误处理的日志记录和不相关的部分。

谢谢!

编辑我: 谢谢大家的帮助。关于在 CHM 上使用 putIfAbsent() 的建议是关键。我最终这样做了(欢迎任何其他评论):

编辑二:在类 的其他分支中添加了 CHM 元素删除if(因为现在我将元素放在地图中,即使我不需要)。

编辑三: 在变量中移动了上面文件存在的检查isFileInCache

0 投票
2 回答
3668 浏览

c#-4.0 - 并行 foreach 并发字典添加

我有电话簿中的条目:姓名+地址。来源在一个网站上,计数超过 1K 条记录。

问题是:

我如何使用/ ConcurrentDictionary实现ParallelForeach

我还不如问它会更好地执行:

ConcurrentDictionary&ParallelForeach

对比

Dictionary&foreach

由于名称不允许重复作为键,而且我认为我理解正确,只有当键不存在时才ConcurrentDictionary具有自己的 add() 内置函数。TryAdd所以不允许添加已经处理好的重复键的问题,所以从那时起我可以清楚地看到平衡正在转向ConcurrentDictionary而不是标准顺序Dictionary

那么如何从任何给定的数据源添加名称和地址并通过 Parallelforeach 将其加载到 ConcurrentDictionary

0 投票
6 回答
2220 浏览

java - concurrentHashMap 的片段以检索对象或在不存在时创建它(作为原子操作)

在Java中,我想做这样的事情:

现在该代码片段可以在多线程环境中执行。 map可以是 ConcurrentHashMap。

但是我如何使这个逻辑原子化呢?

请不要给我像“同步”块这样的琐碎解决方案。我希望这个问题可以一劳永逸地解决。