本文分享自中移OneOS公众号《任务间同步》。
多个任务操作同一块代码区域,这块代码就称为临界区,如果任何时刻最多只允许一个任务去使用临界区,那么多个任务就需要互斥的访问。当一个任务占用此资源时,其它需要该资源的任务必须等待,直到占用者释放资源。
另外一种使用场景是任务间同步,是指多个关联任务需要按预定的次序运行,如果没有同步,那任务之间将是无序、不符合预期的。
互斥量
互斥量有解锁和加锁两种状态,初始化时互斥量处于解锁状态,当有任务获取该互斥量后,处于加锁状态,此时其他任务没有权限再获取该互斥量,直到当前任务释放。同时,互斥量具有递归特性,持有该互斥量的任务也能够再次获取而不被挂起。
在操作系统中,使用优先级继承算法解决优先级翻转问题。优先级翻转是指当一个高优先级任务H通过同步机制访问同步资源时,该资源已被一低优先级任务L占有,而系统中还有中优先级的任务M在执行,造成L得不到调度,高优先级任务H就一直被阻塞,结果M先于H执行,优先级发生了翻转,实时性难以得到保证。优先级继承算法实现如下,高优先级任务H在等待低优先级的任务L占用的同步资源时,由操作系统把L的优先级提高到H的优先级,从而让L以H的优