自旋锁不是谁想用就能用的,必须分场合。如果是同一个处理器内的多个任务需要共享资源,且在其他处理器上没有需要此资源的任务,就不得使用带WFE的自旋锁,因为在执行WFE后,该处理器已经睡眠了,无法再执行其它指令,更不要说调度其他任务让它调用spin_unlock_with_SEV了,此时又没有“外力”,因此就很可能要“长眠”了!进一步地,单机场合下不得不使用自旋锁。因为自旋锁可能导致死循环:优先级最高的任务如果使用自旋锁未果,则在按优先级调度的RTOS中,如果没有反优先级倒转机制,就会使最高优先级的任务永远无线循环,CPU利用率100%,却再也执行不了其它任务。 |