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. 但不能多次加入同一个.

posted on 2011-05-06 10:23  oleeceo  阅读(3861)  评论(0)    收藏  举报

导航