diff --git a/docs/labs/0x05/tasks.md b/docs/labs/0x05/tasks.md index 9ed65d7c..27526ce3 100644 --- a/docs/labs/0x05/tasks.md +++ b/docs/labs/0x05/tasks.md @@ -688,6 +688,8 @@ pub fn sys_sem(args: &SyscallArgs, context: &mut ProcessContext) { - 在每个线程生产或消费的时候,输出相关的信息。 + 你可能需要使用信号量或自选锁来实现一个互斥锁,保证操作和信息输出之间不会被打断。 + - 在生产者和消费者完成上述操作后,使用 `sys_exit(0)` 直接退出。 - 最终使用父进程等待全部的子进程退出后,输出消息队列的消息数量。 @@ -701,6 +703,12 @@ pub fn sys_sem(args: &SyscallArgs, context: &mut ProcessContext) { - 在队列为空时,消费者是否被阻塞? - 在队列满时,生产者是否被阻塞? +!!! question "分别设置队列容量为 `1, 4, 8, 16`,记录观察生产者和消费者的行为:" + + 1. 队列的元素计数是否没有超过容量? + 2. 生产者和消费者是否能够交替工作? + 3. 尝试观察到多个生产者或消费者同时进行同种操作的情况。 + #### 哲学家的晚饭 假设有 5 个哲学家,他们的生活只是思考和吃饭。这些哲学家共用一个圆桌,每位都有一把椅子。在桌子中央有一碗米饭,在桌子上放着 5 根筷子。