首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoResetEvent专门支持的并行模式

AutoResetEvent专门支持的并行模式
EN

Stack Overflow用户
提问于 2012-07-06 19:26:00
回答 1查看 250关注 0票数 1

msdn AutoResetEvent

问题

什么样的并行模式最适合于AutoResetEvent?

背景

当比较线程间同步的选项时,我们可以将AutoResetEventManualResetEvent进行比较。考虑这两个区别:

  1. AutoResetEvent最多只发布一个等待线程。
  2. 在释放一个等待线程后,AutoResetEvent会自动重置。

需要注意的是,如果两个线程正在等待,而一个AutoResetEvent触发两次,则可能发生争用条件,并且只释放一个线程。可以使用更多的锁来保护不受这种情况的影响--但问题的焦点是AutoResetEvent最擅长的模式(也许这意味着它自己支持什么模式最好)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-06 19:33:44

我不确定在这种情况下我们能不能讨论并行模式。模式的抽象级别要比仅仅是同步机制(如AutoResetEvent )高得多。

当我们谈到并行模式时,我们提到了解决常见并行性问题的一般方法,如数据结构的几何分解、并行分而治之、生产者-使用者等,这些方法可以通过一系列低级机制具体实现,并且语言和平台无关。

AutoResetEvent是一种.NET同步机制。它可以与Thread类一起使用,在具体案例中实现上述模式之一,但是这个实现可以很好地替换为线程和条件变量。

在解决并行性问题时,我被教会了看待事物的方式是沿着以下三个步骤进行的,从抽象到具体:

  1. 确定适用的并行模式
  2. 确定实现模式的合适算法。
  3. 确定合适的低级别机制来实现该算法。

编辑:好的,在查看了我以前的“东西”之后,我已经确定了一个可以使用AutoResetEvent实现的模式。要很好地解释这个问题,请看我这里的老问题:并行应用程序具有随机性

正如您从描述中看到的,在开始计算分配给它的行之前,每个线程必须等待一个配套线程至少处理前一行的前几个项。这意味着每个线程必须在分配给它的每一行的开头阻塞,并等待一个信号。因此,假设有3个线程处理矩阵,则线程0将在行0、3、6的开头阻塞.线1在第1,4,7行.诸若此类。

这种等待等待信号的行为可以很容易地使用每个线程使用一个AutoResetEvent来实现,因为每个线程需要阻塞几次,这意味着我们需要多次重置事件,并且不存在因为线程必须等待对方前进而迅速发出信号的危险。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11368516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档