From: Felix Lee Date: Fri, 17 Nov 2023 14:47:10 +0000 (+0800) Subject: add description for completions part X-Git-Url: https://www.ivnss.com/gitweb/?a=commitdiff_plain;ds=inline;p=lkmpgcn add description for completions part --- diff --git a/lkmpg_cn.tex b/lkmpg_cn.tex index 404aa96..1c5c140 100644 --- a/lkmpg_cn.tex +++ b/lkmpg_cn.tex @@ -1897,14 +1897,22 @@ $ \section{完成} \label{sec:completion} 在一个拥有多线程的模块中,有时一件事应在另一件事之前发生。而不是使用 \sh|sleep| % -命令,内核有另一种方法可以做到这一点,它允许超时或中断发生。在下面的示例中,两% -个线程已经开始,但一个需要在另一个之前开始。 +命令,内核有另一种方法可以做到这一点,它允许超时或中断发生。 + +Completions 是具有三部分的代码同步机制,初始化一个结构 completion同步对象,通% +过 \cpp|wait_for_completion()| 等候边界部分,并且信号部分通过一个调用来到达 % +\cpp|complete()| 函数。 \samplec{examples/completions.c} -\cpp|machine| 结构为两个线程存储完成状态。在每个线程的退出点,该线程相应的完成% -状态被更新,并且 \cpp|wait_for_completion| 被飞轮线程使用,来确保它不会过早的% -开始。 +在后续的示例中,两个线程被初始化:曲轴与飞轮。极为重要的是曲轴线程要先于飞轮线% +程开始。一个 completion 状态是针对于这两个线程而确立的,这是区别于 completion % +被同时定义的曲轴与飞轮线线程。 + +在每个线程的退出点,该线程相应的完成状态被更新,并且 \cpp|wait_for_completion| % +被飞轮线程使用,来确保它不会过早的开始。 + +曲轴线程使用 \cpp|complete_all()| 函数来更新 completetion,其让飞轮线程得以继续。 因此即使 \cpp|flywheel_thread| 首先启动,你应当注意到是否加载这个模块,并运行 % \sh|shidmesg| 命令,该命令使得转动曲轴线程总是首先发生,因为 flywheel 线程会等%