ucos 多个任务等待一个信号量

时间:2022-03-29 20:39:39
一个例子


  前提:有三个任务,优先级为4、5、6,并且优先级最低的最先运行,同时三个任务都会使用同一个信号量,信号量初始值为1.


  第1步:信号量被创建,cnt=1,这时候任务就绪列表为空,信号量等待列表为空。


  第2步:任务6开始执行,试图获得信号量由于cnt为1,所以会得到信号量得到后cnt减一变为0,这时候任务就绪列表为6,信号量等待列表为空。


  第3步:任务5中断6开始执行,任务5也试图获得信号量由于cnt=0任务5必须等待,信号量等待列表加入5,这时候任务就绪列表为6,信号量等待列表为5。


  第4步:更高优先级的任务4中断6开始执行也在等待同一信号量,信号量等待列表加入4,这时候任务就绪列表为6,信号量等待列表为4、5。


  第5步:任务6释放信号量,由于存在等待任务,所以让等待列表中优先级最高的任务进入就绪列表,重新调度,任务4运行,这时候任务就绪列表为4,信号量等待列表为5。


  第6步:任务4得到了信号量开始执行,执行过程中会释放信号量,这样任务5也进入了就绪列表,重新调度仍然优先级高的任务4运行,这时候任务就绪列表为4、5,信号量等待列表为空。


  第7步:任务4运行后任务5有机会运行,任务5释放信号量,由于已经没有任务在等待该信号量所以直接让cnt加一,cnt=1,信号量回到了初始状态,这时候任务就绪列表为空,信号量等待列表为空。