多处理器编程中的互斥算法详解
在多处理器编程领域,互斥是一种极为普遍的协调形式。本文将深入探讨经典的互斥算法,这些算法通过读写共享内存来实现互斥功能。虽然它们在实际应用中较少使用,但对于理解同步算法和正确性问题非常有帮助。
1. 时间相关概念
在并发计算中,对时间的推理至关重要。我们常常需要处理多个时间间隔的重叠或不重叠情况,因此需要一种简洁明了的语言来描述事件和时间持续。
- 事件 :事件是瞬间发生的,即它们在某一时刻发生。为了方便处理,我们假设不同的事件不会同时发生。线程 A 会产生一系列事件,如 a0, a1, … 。我们用 aj
i 表示事件 ai 的第 j 次发生。若事件 a 在事件 b 之前发生,我们记作 a → b ,这种先后关系是事件的全序关系。 - 时间间隔 :设 a0 和 a1 是两个事件,且 a0 → a1 ,那么区间 (a0, a1) 就是这两个事件之间的持续时间。如果区间 IA = (a0, a1) 的最后一个事件在区间 IB = (b0, b1) 的第一个事件之前发生,即 a1 → b0 ,我们记作 IA → IB 。这种关系是区间的偏序关系,没有先后关系的区间被称为并发区间。
2. 临界区
在单线程系统中,某些类的实现是正确的,但在多线程环境下可能会出现问题。例如,下面的 Counter 类:
class Counter {
private int value;
public Count
超级会员免费看
订阅专栏 解锁全文
32

被折叠的 条评论
为什么被折叠?



