假设有一个进程拥有两个线程(编号为0和1)需要去访问同一个共享资源,为了避免竞争状态的问题,必须实现一种互斥机制,使得在任何时候只能有一个线程在访问这个资源。假设有如下的一段代码: int flag[2];/*flag数组,初始化为FALSE*/

admin2014-04-17  28

问题 假设有一个进程拥有两个线程(编号为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_Seetion(int my_thread_id),int other_thread_id)
    {
    flag[my_thread_id]=FALSE;
    }
    当一个线程想要访问临界资源时,就调用上述的这两个函数。例如,线程0的代码可能是这样的:
    Enter_Critical_Section(0,1);
    ……使用这个资源……
    Exit_Critical_Section(0,1),
    ……做其他的事情……
    试问:
该共享资源可以是(    )。

选项 A、进程代码
B、线程1的堆栈
C、进程所拥有的已打开文件
D、计算机全部的地址空间

答案A,C

解析 线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源,如线程控制块、一些寄存器和堆栈,所以B选项错误。堆栈是线程拥有的资源,不可共享。
    在同一进程中的各个线程,都可以共享该进程所拥有的资源,但多数情况下,进程只会拥有一定的地址空间,不可能拥有计算机全部的地址空间,所以D选项错误。
转载请注明原文地址:https://jikaoti.com/ti/PjajFFFM
0

最新回复(0)