互斥信号量 嵌套(递归)资源访问 每个获取信号量的调用必须与释放信号量的调 用相匹配。当最外层的获取信号量的调用与释 放信号量的调用匹配时,该信号量才允许被其 它任务访问。 用于同步的信号量不支持嵌套访问,任务如果 对同步信号量使用上述操作是错误的,任务会 被永久阻塞,并且阻塞条件永远不会解除。 电子科技大学嵌入式件工程中心 EsE匚
电子科技大学嵌入式软件工程中心 互斥信号量 • 嵌套(递归)资源访问 – 每个获取信号量的调用必须与释放信号量的调 用相匹配。当最外层的获取信号量的调用与释 放信号量的调用匹配时,该信号量才允许被其 它任务访问。 – 用于同步的信号量不支持嵌套访问,任务如果 对同步信号量使用上述操作是错误的,任务会 被永久阻塞,并且阻塞条件永远不会解除
互斥信号量 删除安全 在一个受信号量保护的临界区,经常需要保护 在临界区执行的任务不会被意外地删除。 删除一个在临界区执行的任务可能引起意想不 到的后果,造成保护资源的信号量不可用,可 能导致资源处于破坏状态,也就导致了其它所 有要访问该资源的任务无法得到满足 电子科技大学嵌入式件工程中心 EsE匚
电子科技大学嵌入式软件工程中心 互斥信号量 • 删除安全: – 在一个受信号量保护的临界区,经常需要保护 在临界区执行的任务不会被意外地删除。 – 删除一个在临界区执行的任务可能引起意想不 到的后果,造成保护资源的信号量不可用,可 能导致资源处于破坏状态,也就导致了其它所 有要访问该资源的任务无法得到满足
互斥信号量 删除安全 为避免任务在临界区执行时不被意外删除: 提供“任务保护”和“解除仼务保护”原语对 同时,为互斥信号量提供“删除安全”选项。在创 建信号量的时候使用这个选项,当应用每次获取信 号量时隐含地使能“任务保护”功能,当每次释放 信号量时隐含地使用“解除仼务保护”功能。 电子科技大学嵌入式件工程中心 EsE匚
电子科技大学嵌入式软件工程中心 互斥信号量 • 删除安全: – 为避免任务在临界区执行时不被意外删除: • 提供“任务保护”和“解除任务保护”原语对 • 同时,为互斥信号量提供“删除安全”选项。在创 建信号量的时候使用这个选项,当应用每次获取信 号量时隐含地使能“任务保护”功能,当每次释放 信号量时隐含地使用“解除任务保护”功能
二值信号量 二值信号量主要用于任务与任务之间、任务与中 断服务程序之间的同步 用于同步的二值信号量初始值为0,表示同步事件尚未 生 任务申请信号量以等待该同步事件的发生; 另一个任务或lSR到达同步点时,释放信号量(将其值 设置为1)表示同步事件已发生,以唤醒等待的任务。 Task Task2 二值信号量 初值为0 电子科技大学嵌入式件工程中心 EsE匚
电子科技大学嵌入式软件工程中心 二值信号量 • 二值信号量主要用于任务与任务之间、任务与中 断服务程序之间的同步 – 用于同步的二值信号量初始值为0,表示同步事件尚未 产生; – 任务申请信号量以等待该同步事件的发生; – 另一个任务或ISR到达同步点时,释放信号量(将其值 设置为1)表示同步事件已发生,以唤醒等待的任务。 Task1 Task2 二值信号量 初值为0
二值信号量 申请并获得 (值为0 可获得 不可获得 初始化 值为0 释放 (值为1) 二值信号量状态图 电子科技大学嵌入式件工程中心 EsE匚
电子科技大学嵌入式软件工程中心 二值信号量 二值信号量状态图 可获得 不可获得 申请并获得 (值为0) 释放 (值为1) 初始化 值为0