我不确定在这种情况下我们是否可以谈论并行模式。模式比单纯的同步机制(例如AutoResetEvent
.
当我们谈到并行模式时,我们指的是解决常见并行性问题的通用方法,例如数据结构的几何分解、并行分治、生产者-消费者等,这些方法可以通过一系列较低的具体实现级别机制,并且与语言和平台无关。
AutoResetEvent
是一种.NET 同步机制。它可以与类一起用于在具体案例Thread
中实现上述模式之一,但是这种实现可以很好地替换为例如 pthread 和条件变量。
在解决并行性问题时,我被教导看待事物的方式是从抽象到具体的这三个步骤:
- 确定适用的平行模式
- 确定一个合适的算法来实现模式
- 确定合适的低级机制来实现算法
编辑:好的,在查看了我的旧“东西”之后,我发现了一种可以使用AutoResetEvent
. 要很好地解释问题,请查看我的旧问题:并行应用程序具有随机行为
从描述中可以看出,在开始计算分配给它的行之前,每个线程必须等待伴随线程至少处理前一行的前几项。这意味着每个线程必须在分配给它的每一行的开头阻塞并等待信号。因此,假设我们有 3 个线程处理矩阵,线程 0 将在第 0、3、6 行的开头阻塞……线程 1 在第 1、4、7 行……依此类推。
这种等待发出信号的行为可以很容易地使用AutoResetEvent
每个线程来实现,因为每个线程都需要多次阻塞,这意味着我们需要多次重置事件并且不存在按顺序快速发出信号的危险,因为线程必须等待彼此前进。