有如下民航订票程序:
int booking(id, char n, int c) //订票例程,id 是用户号,n 为航班号,c 为票数 { int i; while TS(&lock); //Test-and-Set 指令 i = fetch(n,s); //从主服务器取航班 n 的机票余额 s i = s - c; //购票数额为 c send(n, i); //送回新机票余额 lock = FALSE; //置标志为 F output(void); //打印行程单 }
其中,while TS(&lock)语句的作用是
临界资源访问过程中的进入区
临界资源访问过程中的临界区
临界资源访问过程中的退出区
临界资源访问过程中的剩余区
答案
临界资源访问过程中的进入区
解析
在上述民航订票程序中,while TS(&lock) 语句的作用是临界资源访问过程中的进入区的一部分。
解释如下:
进入区:这是进程试图进入临界区的代码段,它通常包含了对互斥锁的检查和获取操作。在提供的代码中,while TS(&lock); 语句是进入区的一部分,因为它使用了 Test-and-Set 指令来尝试获取锁。这个循环会一直执行,直到成功获取到锁为止,确保每次只有一个进程可以进入临界区。
临界区:这是进程实际访问临界资源的代码段。在提供的代码中,i = fetch(n,s); 到 send(n, i); 这一段代码是临界区,因为它包含了实际的订票操作,即更新航班的机票余额。
退出区:这是进程离开临界区的代码段,它通常包含了对互斥锁的释放操作。在提供的代码中,lock = FALSE; 语句是退出区的一部分,因为它释放了锁,允许其他进程获取锁并进入临界区。
剩余区:这是进程在退出临界区之后的代码段,它不再涉及对临界资源的访问。在提供的代码中,output(void); 语句是剩余区的一部分,因为它是在锁被释放后执行的,用于打印行程单。
因此,while TS(&lock) 语句的作用是临界资源访问过程中的进入区的一部分,它的目的是确保在任何时候只有一个进程可以访问临界资源(即更新航班的机票余额)。