【发布时间】:2015-09-02 16:04:34
【问题描述】:
在我的大学幻灯片中,老师写道,这种解决 MUTEX 问题的方法不起作用。为什么?
lock = true 表示临界区已经有进程
- Process1 检查锁,发现它是假的
- Process2 中断 Process1
- Process2 检查锁,它仍然是假的
- Process2 将 lock 设置为 true 并进入临界区
- Process1 再次检查锁定,将其设置为 true 并进入临界区。 (怎么办?为什么读的不是真的,所以进不去?)
【问题讨论】:
-
发布一个实际的解决方案将帮助我们理解为什么它不起作用......我有几个猜测,但在我看到代码之前我不会发表评论。
-
如果在您的程序中,如果您正在创建多个线程,并且您知道多个线程可以同时运行,那么可能发生的情况是,假设两个线程都将锁变量读取为 false同时,两者都允许在关键代码部分输入它。并且还可以说由于您的硬件或任何其他原因,一次只运行一个胎面,那么由于线程调度也可能发生这种竞争情况
-
幻灯片中没有代码。这 5 个步骤与幻灯片中的一样,只是从德语翻译成英语。我认为这与获取和设置锁定值有关,而不是一个原子操作(或者是其他什么?),但我不明白为什么它不是原子的。
-
真的无法理解老师的意思。基本上,这里是说某事因为某某而无法工作。但由于我们不知道这是什么东西,所以除了改写那 5 张幻灯片之外,不可能告诉你那里有什么问题,但这当然没有太大帮助。
标签: multithreading parallel-processing mutex