【发布时间】:2014-10-31 04:57:39
【问题描述】:
我正在尝试学习同步,并了解需要满足 3 个条件才能正常工作
1) 互斥 - 没有数据被破坏
2) 有界等待 - 线程不会永远什么都不做
3)正在取得进展 - 系统作为一个整体正在工作,例如不只是路过轮到谁了
我不完全理解为什么下面的代码不起作用。根据我的笔记,它具有互斥性,但不满足取得进展或有限等待。为什么?每个线程都可以做一些事情,只要现在线程崩溃,每个线程都会轮到。 以下是共享变量
int turn; // initially turn = 0
turn == i: Pi can enter its critical section
代码是
do {
while (turn != i){}//wait
critical section
turn = j;//j signifies process Pj in contrast to Pi
remainder section
} while (true);
基本上是these notes的第10张幻灯片。
【问题讨论】:
-
j来自哪里? -
@Thilo 另一个线程,我会编辑以使其更清晰
-
所以每个线程都知道它的“下一个线程”?
-
@Thilo 不,所以上面的代码是从线程 Pi 的角度来看的,所以 j 只是表示轮到 Pi,它是 Pj。基本上它只是意味着另一个线程获得了锁。以上是比实际实现更多的伪代码。
-
@Thilo 这个问题现在有意义吗?
标签: multithreading language-agnostic synchronization mutex theory