Thread Ordering Service(线程排序和调度服务)
the thread ordering service 控制 一个或多个用户客户线程的执行. 它保证每个用户线程 能够在特定时期 根据相对顺序, 运行上一次.
Windows Server 2003 and Windows XP/2000: 不支持the thread ordering service
每个用户线程属于一个thread ordering group. 父线程创建一个或多个thread ordering group通过调用AvRtCreateThreadOrderingGroup功能. 父线程 使用 这个函数来 为thread ordering group 设置 period 和 time-out interval.
附加用户线程 调用 AvRtJoinThreadOrderingGroup 功能来加入到已经存在的 thread ordering group. 这些线程被指明在运行期间是父进程的前驱还是后继(指定运行时). 在每个period, 每个线程被期望完成一定的工作. group中的所有线程应该完成他们在period时间的处理.
一个 thread ordering group中的线程 执行他们的代码 通过AvRtWaitOnThreadOrderingGroup 控制.
首先, 在一个时间点 只有一个前驱线程被执行(根据进入顺序), 同时父线程 和 后继线程 被 AvRtWaitOnThreadOrderingGroup锁定. 当每个线程完成执行后, 他们会返回最上层的loop循环, 并 调用AvRtWaitOnThreadOrderingGroup来锁定直到下一次轮到它运行. 当所有前驱线程已经调用了等待, the thread ordering srevice 开始调度 父亲线程. 然后继续进入下一轮循环。 如果所有线程在 规定时间内 完成了所有操作, 他们会等到时间用完,空闲时间不做任何事。
当一个客户线程不再作为 thread ordering group的一部分, 可以调用 AvRtLeaveThreadOrderingGroup 函数来自己把自己从组中移除. 注意父线程不能自己把自己移除。 如果一个线程没有在period plus the time-out interval elapses时间内完成, 它将被deleted from 组。
父亲线程调用 AvRtDeleteThreadOrderingGroup 来删除thread ordering group. 即使父线程没有执行完应有的时间. 删除后再调用 AvRtWaitOnThreadOrderingGroup 会失败或超时.
predecessor:
相对父线程, 在前.
successor:
相对父线程, 在后.
一个线程可以创建多个 thread ordering group.
一个线程可以加入多个 thread ordering group. 但不能多次加入同一个.