问题
问答题
假设有两个线程(编号为0和1)需要去访问同一个共享资源,为了避免竞争状态的问题,我们必须实现一种互斥机制,使得在任何时候只能有一个线程在访问这个资源。假设有如下的一段代码:
当一个线程想要访问临界资源时,就调用上述的这两个函数。例如,线程0的代码可能是这样的:
试问:
如果把Enter_Critical_Section()函数中的两条语句互换一下位置,结果会如何
答案
参考答案:可能会出现死锁,考虑如下的情形:
①初始化时,flag数组的两个元素值均为FALSE;
②线程0先执行,flag[0]=TRuE,假设这个时候来了一个时钟中断,打断它的运行;
③线程1去执行,flag[1]=TRUE,在执行while循环语句时,由于flag[0]=TRuE,所以在这个地方被卡住,直到时间片用完;
④线程0再执行的时候,由于flag[1]=TRuE,它也在while循环语句的地方被卡住,这样,这两个线程都无法执行下去,从而死锁。