14-习题
47.13 习题
47-1. 试验程序清单47-8中的程序((svsem_op.c)来确认对semop()系统调用的理解。
47-2. 修改程序清单24-6中的程序(fork_sig_sync.c)使之使用信号量来替代信号完成父进程和子进程之间的同步。
47-3. 试验程序清单47-8中的程序(svsem_op.c)和本章中提供的其他有关信号量的程序来检查当一个既有进程对一个信号量执行了一个SEM_UNDO调整时sempid值会发生什么情况。
47-4. 在程序清单47-10给出的代码(binary_sems.c)中增加一个reserveSemNB()函数来使用IPC_NOWAIT标记实现有条件的预留操作。
47-5. 在VMS操作系统上,Digital提供了一种类似于二元信号量的同步方法,它被称为事件标记(event flag)。一个事件标记可以取两个值clear和set,并且在其之上可以执行下面4种操作:setEventFlag来设置标记;clearEventFlag来清除标记;waitForEventFlag阻塞直到标记被设置;getFlagState获取标记的当前状态。使用System V信号量为事件标记设计一种实现。这个实现要求上面每个函数都接收两个参数:一个是信号量标识符,一个是信号量序号。(在考虑waitForEventFlag操作时将会发现为clear和set状态取值不是一件容易的事情。)
47-6. 使用命名管道实现一个二元信号量协议。提供函数来预留、释放以及有条件地预留信号量。
47-7. 编写一个与程序清单46-6中给出的程序(svmsg_ls.c)类似的程序使之使用semctl() SEM_INFO和SEM_STAT操作来获取和显示系统上所有信号量集列表。