diff --git a/source/chapter8/5exercise.rst b/source/chapter8/5exercise.rst index 1c511ba..29f4bae 100644 --- a/source/chapter8/5exercise.rst +++ b/source/chapter8/5exercise.rst @@ -26,14 +26,16 @@ chapter8 练习 编程作业 -------------------------------------- -.. warning:: - - 本次实验框架变动较大,且改动较为复杂,为降低同学们的工作量,本次实验不要求合并之前的实验内容, - 只需通过 ch8 系列的测例和前面章节的基础测例即可。 - .. note:: - 本次实验的工作量约为 100~200 行代码。 + 本次实验框架变动较大,且改动较为复杂,为降低同学们的工作量,本次实验不要求合并之前的实验内容, + 可以直接 checkout 到助教的 ch8 框架开始实验,最终只需通过 ch8 系列的测例和前面章节的基础测例即可。 + +.. warning:: + + 本次实验实现死锁检测算法本身只需要40行左右代码,但加上系统调用实现、变量声明与初始化、 + 以及在锁的创建、锁、释放时维护死锁检测 Available、Allocation、Request 数组, + 总代码量预计在100~200行。 死锁检测 @@ -106,8 +108,10 @@ chapter8 练习 1. 在我们的多线程实现中,当主线程 (即 0 号线程) 退出时,视为整个进程退出, 此时需要结束该进程管理的所有线程并回收其资源。 + - 需要回收的资源有哪些? - - 其他线程的 TaskControlBlock 可能在哪些位置被引用,分别是否需要回收,为什么? + - 其他线程的 ``struct thread`` 可能在哪些位置被引用,分别是否需要回收,为什么? + 2. 对比以下两种 ``mutex_unlock`` 中阻塞锁的实现,二者有什么区别?这些区别可能会导致什么问题? (假设无论 ``mutex_lock`` 均正确处理了 ``m->locked``)