问题
问答题
阅读以下技术说明和C语言代码,根据要求回答问题1至问题6。
【说明】
有两个进程(编号分别为0和1)需要访问同一个共享资源。为了解决竞争条件(race condition)的问题,需要实现一种互斥机制,使得在任何时刻只能有一个进程访问该共享资源。以下【C代码1】给出了一种实现方法。
【C代码1】
int flag[2]; /+flag数组,初始化为FALSE*/
Enter_Critical_Section(int my_task_id, int other_task_id)
{ while (flag[other_task_id]==TRUE); /*空循环语句*/
flag[my_task_id]=TRUE;
}
Exit_Critical_Section(int my_task_id, int other_task_id)
{ flag[my_task_id]=FALSE;
}
当一个进程要访问临界资源时,就可以调用【C代码1】给出的这两个函数。【C代码2】给出了进程0的一个例子。
【C代码2】
Enter_Critical_Section(0,1);
……使用这个资源……
Exit_Critical_Section(0,1);
……做其他的事情……
【问题4】 如果把Enter_Critical_Section()函数中的两条语句互换一下位置,则可能会出现什么情况 |
答案
参考答案:
解析:可能会出现死锁[要点解析] 在“Enter_Critical_Section(int my_task_jd, int other_task_id)”函数中,已提示“while(flag[other_task_id]==TRUE);”是一条空循环语句。如果将它调到“flag[my_task_id]=TRUE;”语句之后,将导致程序进入死锁状态。