多线程互斥算法详解
在多处理器编程中,互斥是一种非常普遍的协调形式。本文将详细介绍一些经典的互斥算法,这些算法通过读写共享内存来实现,虽然在实际中可能不会直接使用,但它们能帮助我们理解同步领域中出现的算法和正确性问题。
1. 时间与事件的基本概念
在并发计算中,对时间的推理至关重要。我们需要一种简单且明确的语言来描述事件和时间间隔。
- 事件 :事件是瞬间发生的,即它们在某一时刻发生。为了方便,我们假设不同的事件不会同时发生,不同的事件发生在不同的时间。如果不确定两个非常接近的事件的顺序,任何顺序都可以。线程 A 会产生一系列事件 (a_0, a_1, \cdots),由于线程通常包含循环,一个程序语句可能会产生多个事件。我们用 (a_i^j) 表示事件 (a_i) 的第 (j) 次发生。如果事件 (a) 在事件 (b) 之前发生,我们记为 (a \to b),“(\to)” 是事件上的全序关系。
- 时间间隔 :设 (a_0) 和 (a_1) 是两个事件,且 (a_0 \to a_1),则区间 ((a_0, a_1)) 是 (a_0) 到 (a_1) 之间的持续时间。如果区间 (I_A = (a_0, a_1)) 的最后一个事件 (a_1) 在区间 (I_B = (b_0, b_1)) 的起始事件 (b_0) 之前发生,即 (a_1 \to b_0),我们记为 (I_A \to I_B)。“(\to)” 是区间上的偏序关系,没有 “(\to)” 关系的区间称为并发区间。我们用 (I_A^j) 表示区间 (I_A) 的第 (j) 次执行。
超级会员免费看
订阅专栏 解锁全文
32

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



