daguobayern

Results 1 comments of daguobayern

感谢回复,是这个意思,如果A,B是先后获取信号量而挂起的,而这个信号量的flag是RT_IPC_FLAG_PRIO,表示在有信号量时按挂起顺序来执行线程,即先执行A后再执行B。 在高优先级线程C中释放信号量时,rt_sem_release/_ipc_list_resume函数取出挂起的线程插入到ready list中,由于是先A后B获取的信号量,挂起线程中的链表顺序是A->B,那么第一次取出的线程是A,插入到ready list的是使用rt_list_insert_after,即插入到头部。而后发生调度,此时执行D,D再次释放信号量,同样的流程,这次从挂起线程链表中取出的线程是B,插入到ready list的也是使用rt_list_insert_after,那么会插入到A的前面,即此时ready list的链表顺序是B->A,再次调度时则会先执行B再执行A,这就违背FIFO属性了。