0

我有考试,我在考试中遇到了这个问题:

对于下面的每一个陈述,用一句话说明该陈述是对还是错,以及为什么。• 在提供非抢占式调度线程(即无非自愿上下文切换)的并发编程环境中,不需要互斥同步。

考试后我得到的答案是:

[错误的。互斥同步仍然需要 (1) 在多处理器上和 (2) 在单处理器上用于包含阻塞操作的关键部分。]

但我无法接受。谁能解释清楚?

4

1 回答 1

2

在多处理器系统的情况下,您有例如 2 个任务同时运行并共享一个变量 s:

s = 1;
T1 reads s1 = 1;
T2 reads s2 = 1;
T1 increments s1: s1 = 2;
T2 increments s2: s2 = 2;
T1 writes s: s = s1 = 2;
T2 writes s: s = s2 = 2;

但是 s 现在应该是 3,因为有两个任务将它加一。为了防止这种情况,您必须确保在另一个任务读取变量之前读取、操作和写入变量。

在单处理器系统上,同样可能发生:

T1 reads s;
T1 blocks on an operation;
T2 runs and reads s;
T2 blocks on an operation;
T1 manipulates and writes;
T2 manipulates and writes;

s被操纵了两次,但结果只显示了对T2的操纵。

如果您只更改单个变量,则可以使用原子操作。但是,如果您的关键部分较大,则必须使用互斥锁来保护它。

于 2013-11-02T17:22:51.837 回答