reactos操作系统实现(41)

当线程初始化成功后,是怎么样放到推迟就绪队列的呢?通过下面这几个函数的分析,就会了解这个问题了。从以前的分析可以知道是调用函数KeReadyThread来执行的,这个函数代码如下:

#001 VOID

#002 NTAPI

#003 KeReadyThread(IN PKTHREAD Thread)

#004 {

这里参数Thread就是刚刚创建的线程。

#005 KIRQL OldIrql;

#006 ASSERT_THREAD(Thread);

#007 ASSERT_IRQL_LESS_OR_EQUAL(disPATCH_LEVEL);

#008

锁住分发器的自旋锁,以便原子操作。

#009 /* Lock the dispatcher Database */

#010 OldIrql = KiAcquiredispatcherLock();

#011

设置线程为就绪状态。

#012 /* Make the thread ready */

#013 KiReadyThread(Thread);

#014

释放分发器的自旋锁。

#015 /* Unlock dispatcher database */

#016 KiReleasedispatcherLock(OldIrql);

#017 }

在这函数里主要就是同步了分发器的自旋锁,然后用调函数KiReadyThread来进一步设置线程就绪状态。

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...