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来进一步设置线程就绪状态。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |