问答题
假设有一个进程拥有两个线程(编号为0和1)需要去访问同一个共享资源,为了避免竞争状态的问题,必须实现一种互斥机制,使得在任何时候只能有一个线程在访问这个资源。假设有如下的一段代码:
int flag[2]; /*flag数组,初始化为FALSE*/
Enter_critical_Section(int my_thread_id),int other_thread_id)
{
while (flag[other_thread_id]==TRUE);
/*空循环语句*/
flag[my_thread_id]=TRUE;
}
Exit_Critical_Section(int my_thread_id),int other_thread_id)
{
flag[my_thread_id]=FALSE;
}
当一个线程想要访问临界资源时,就调用上述的这两个函数。比如,线程0的代码可能是这样的:
Enter_Critical_Section(0,1);
……使用这个资源……
Exit_Critical_Section(0,1);
……做其他的事情……
试问: 如果把Enter_Critical_Section()函数中的两条语句互换一下位置,结果会如何
【参考答案】
可能会出现死锁。 考虑如下的情形: 1)初始化的时候,flag数组的两个元素值均为FALSE。 2)线程0先执行,fla......
(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)