Questions tagged «concurrency»

在计算机科学中,并发是系统的属性,其中可以在重叠的时间段内执行多个计算。这些计算可以在同一芯片的多个内核上执行,也可以在同一处理器上抢占时间共享线程,或者在物理上分开的处理器上执行。




16
集合已修改;枚举操作可能无法执行
我无法弄清此错误的原因,因为在附加调试器后,似乎没有发生此错误。下面是代码。 这是Windows服务中的WCF服务器。每当有数据事件时,服务就会调用NotifySubscribers方法(以随机间隔,但不是很频繁-每天大约800次)。 Windows Forms客户端进行预订时,订户ID被添加到订户字典中,而当客户端取消订阅时,将从该词典中删除它。该错误发生在客户退订时(或之后)。看来,下次调用NotifySubscribers()方法时,foreach()循环会失败,并在主题行中出现错误。该方法将错误写入应用程序日志,如下面的代码所示。当附加了调试器并且客户端取消订阅时,代码将正常执行。 您看到此代码有问题吗?我需要使字典具有线程安全性吗? [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)] public class SubscriptionServer : ISubscriptionServer { private static IDictionary<Guid, Subscriber> subscribers; public SubscriptionServer() { subscribers = new Dictionary<Guid, Subscriber>(); } public void NotifySubscribers(DataRecord sr) { foreach(Subscriber s in subscribers.Values) { try { s.Callback.SignalData(sr); } catch (Exception e) { DCS.WriteToApplicationLog(e.Message, System.Diagnostics.EventLogEntryType.Error); UnsubscribeEvent(s.ClientId); } } } …




19
ConcurrentHashMap和Collections.synchronizedMap(Map)有什么区别?
我有一个地图,该地图将同时被多个线程修改。 Java API中似乎有三种不同的同步Map实现: Hashtable Collections.synchronizedMap(Map) ConcurrentHashMap 据我了解,Hashtable是一个旧的实现(扩展了过时的Dictionary类),后来对其进行了修改以适合该Map接口。虽然它是同步的,但似乎存在严重的可伸缩性问题,因此不建议用于新项目。 但是其他两个呢?Collections.synchronizedMap(Map)和ConcurrentHashMaps 返回的Map之间有什么区别?哪一种适合哪种情况?

9
为什么没有针对ConcurrentHashMap的ConcurrentHashSet
HashSet基于HashMap。 如果我们看一下HashSet<E>实现,则所有内容都在下管理HashMap<E,Object>。 <E>用作的键HashMap。 而且我们知道这HashMap不是线程安全的。这就是为什么我们使用ConcurrentHashMapJava。 基于此,我感到困惑的是,为什么我们没有应该基于的ConcurrentHashSet ConcurrentHashMap? 还有什么我想念的吗?我需要Set在多线程环境中使用。 另外,如果我想创建自己的作品,是否ConcurrentHashSet可以通过仅替换HashMapto ConcurrentHashMap并将其余内容保持不变来实现?

8
NSOperation vs大中央派遣
我正在学习iOS的并发编程。到目前为止,我已经阅读了有关NSOperation/NSOperationQueue和的信息GCD。使用NSOperationQueueover 的原因是什么GCD,反之亦然? 听起来既像GCD又NSOperationQueue抽象NSThreads了用户的显式创建。但是,这两种方法之间的关系对我而言尚不清楚,因此请您提供任何反馈意见!



14
Java 8并行流中的自定义线程池
是否可以为Java 8 并行流指定自定义线程池?我在任何地方都找不到。 假设我有一个服务器应用程序,并且想使用并行流。但是该应用程序很大且是多线程的,因此我想将其划分。我不希望一个模块中的某个模块中的任务运行缓慢,而另一个模块中的任务却运行缓慢。 如果不能为不同的模块使用不同的线程池,则意味着在大多数实际情况下,我不能安全地使用并行流。 请尝试以下示例。在单独的线程中执行一些CPU密集型任务。任务利用并行流。第一个任务已中断,因此每个步骤需要1秒钟(由线程睡眠模拟)。问题是其他线程被卡住并等待中断的任务完成。这是一个人为的示例,但是假设有一个servlet应用程序,有人向共享的fork联接池提交了一个长时间运行的任务。 public class ParallelTest { public static void main(String[] args) throws InterruptedException { ExecutorService es = Executors.newCachedThreadPool(); es.execute(() -> runTask(1000)); //incorrect task es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.shutdown(); es.awaitTermination(60, TimeUnit.SECONDS); } private static void runTask(int …

25
如何使用ExecutorService等待所有线程完成?
我需要一次执行一些任务4,如下所示: ExecutorService taskExecutor = Executors.newFixedThreadPool(4); while(...) { taskExecutor.execute(new MyTask()); } //...wait for completion somehow 完成所有步骤后如何通知我?现在,我想不出什么比设置一些全局任务计数器并在每个任务结束时减少它,然后无限循环监视此计数器为0更好的了。或获取期货的列表,并在无限循环中对所有期货进行isDone监视。什么是不涉及无限循环的更好的解决方案? 谢谢。

8
在C#中使用Global Mutex的良好模式是什么?
Mutex类非常容易被误解,而全局互斥体更是如此。 创建全局互斥锁时,可以使用哪种良好,安全的模式? 一个会起作用的 无论我的机器位于哪个区域 保证正确释放互斥锁 如果没有获取互斥,可以选择不永久挂起 处理其他进程放弃互斥锁的情况
377 c#  concurrency  mutex 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.