这是我在操作系统考试中遇到的问题。我无法找到合适的答案。有人可以帮忙.Given是一个同步代码,许多线程试图使用锁访问全局计数器 -
if(lock==1)
wait(); //sleep this thread until some other thread wakes up this thread
else
lock=1; //enter in protected area
//access global counter g//
lock=0;
//wake up some other thread which is waiting for the lock to be released
上述同步有什么问题?选择下面给出的任何选项
答案 0 :(得分:0)
答案是3.只要线程可以被抢占,此代码就会在安全性和活跃性方面都失败。为安全起见,请考虑以下交错操作与两个线程 t1 和 t2 :
lock
,跳至else语句lock
,跳至else语句我们在关键部分有两个主题。这就是为什么你需要某种原子测试和设置操作,或禁用抢占的能力,以正确地执行它。
对于活跃性,请考虑以下交错操作与两个线程 t1 和 t2 :
lock
,跳至else语句lock
,找到1 lock
设为0 因此 t2 (可能)永远等待。解决方案是使同步原语跟踪唤醒(例如,信号量)或要求测试条件并等待以原子方式完成(例如,互斥和条件变量)。