msdn AutoResetEvent。
问题
什么样的并行模式最适合于AutoResetEvent?
背景
当比较线程间同步的选项时,我们可以将AutoResetEvent与ManualResetEvent进行比较。考虑这两个区别:
需要注意的是,如果两个线程正在等待,而一个AutoResetEvent触发两次,则可能发生争用条件,并且只释放一个线程。可以使用更多的锁来保护不受这种情况的影响--但问题的焦点是AutoResetEvent最擅长的模式(也许这意味着它自己支持什么模式最好)。
发布于 2012-07-06 19:33:44
我不确定在这种情况下我们能不能讨论并行模式。模式的抽象级别要比仅仅是同步机制(如AutoResetEvent )高得多。
当我们谈到并行模式时,我们提到了解决常见并行性问题的一般方法,如数据结构的几何分解、并行分而治之、生产者-使用者等,这些方法可以通过一系列低级机制具体实现,并且语言和平台无关。
AutoResetEvent是一种.NET同步机制。它可以与Thread类一起使用,在具体案例中实现上述模式之一,但是这个实现可以很好地替换为线程和条件变量。
在解决并行性问题时,我被教会了看待事物的方式是沿着以下三个步骤进行的,从抽象到具体:
编辑:好的,在查看了我以前的“东西”之后,我已经确定了一个可以使用AutoResetEvent实现的模式。要很好地解释这个问题,请看我这里的老问题:并行应用程序具有随机性
正如您从描述中看到的,在开始计算分配给它的行之前,每个线程必须等待一个配套线程至少处理前一行的前几个项。这意味着每个线程必须在分配给它的每一行的开头阻塞,并等待一个信号。因此,假设有3个线程处理矩阵,则线程0将在行0、3、6的开头阻塞.线1在第1,4,7行.诸若此类。
这种等待等待信号的行为可以很容易地使用每个线程使用一个AutoResetEvent来实现,因为每个线程需要阻塞几次,这意味着我们需要多次重置事件,并且不存在因为线程必须等待对方前进而迅速发出信号的危险。
https://stackoverflow.com/questions/11368516
复制相似问题