\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 线程会等%