互斥信号量 用互斥信号量保护的代码区称作临界区”,临界区代 码通常用于对共享资源的访问。 互斥信号量的值被初始化成1,表明目前没有任务进入 “临界区”,但最多只有一个任务可以进入“临界区”。 第一个试图进入临界区的任务将成功获得互斥信号 而随后试图进入用同一信号量保护的临界区的所 有其他任务就必须等待。 当任务离开临界区"时,它将释放信号量并允许正在 等待该信号量的任务进入临界区 Task 共享资源 Task2 电子科技大学嵌入式件工程中心 EsE匚
电子科技大学嵌入式软件工程中心 • 用互斥信号量保护的代码区称作“临界区”,临界区代 码通常用于对共享资源的访问。 • 互斥信号量的值被初始化成1,表明目前没有任务进入 “临界区”,但最多只有一个任务可以进入“临界区” 。 • 第一个试图进入“临界区”的任务将成功获得互斥信号 量,而随后试图进入用同一信号量保护的临界区的所 有其他任务就必须等待。 • 当任务离开“临界区”时,它将释放信号量并允许正在 等待该信号量的任务进入“临界区” 。 互斥信号量 Task1 Task2 共享资源
互斥信号量 共享资源可能是一段存储器空间、一个数据结构 或O设备,也可能是被两个或多个并发任务共享 的任何内容。 ·使用互斥信号量可以实现对共享资源的串行访问, 保证只有成功地获取互斥信号量的任务才能够释 放它。 互斥信号量是一种特殊的二值信号量,一般它支 持所有权、递归访问、任务删除安全和一些避免 优先级反转、饥饿、死锁等互斥所固有问题的协 议。 电子科技大学嵌入式件工程中心 EsE匚
电子科技大学嵌入式软件工程中心 互斥信号量 • 共享资源可能是一段存储器空间、一个数据结构 或I/O设备,也可能是被两个或多个并发任务共享 的任何内容。 • 使用互斥信号量可以实现对共享资源的串行访问, 保证只有成功地获取互斥信号量的任务才能够释 放它。 • 互斥信号量是一种特殊的二值信号量,一般它支 持所有权、递归访问、任务删除安全和一些避免 优先级反转、饥饿、死锁等互斥所固有问题的协 议
互斥信号量状态图 申请(递归)并获得 申请并获得 锁定数加1 值为0 初始化 开启 锁定 值为1 释放 值为1 释放(递归) 锁定数减1 互斥信号量状态图 电子科技大学嵌入式件工程中心 EsE匚
电子科技大学嵌入式软件工程中心 互斥信号量状态图 互斥信号量状态图 初始化 开启 锁定 值为1 申请并获得 值为0 释放 值为1 申请(递归)并获得 锁定数加1 释放(递归) 锁定数减1
互斥信号量 所有权:当一个任务通过获取互斥信号量 而将其锁定时,得到该互斥信号量的所有 权。相反,当一个任务释放信号量时,失 去对其的所有权。 当一个任务拥有互斥信号量时,其他的任 务不能再锁定或释放它,即任务要释放互 斥信号量,必须事前先获取该信号量。 电子科技大学嵌入式件工程中心 EsE匚
电子科技大学嵌入式软件工程中心 互斥信号量 • 所有权:当一个任务通过获取互斥信号量 而将其锁定时,得到该互斥信号量的所有 权。相反,当一个任务释放信号量时,失 去对其的所有权。 • 当一个任务拥有互斥信号量时,其他的任 务不能再锁定或释放它,即任务要释放互 斥信号量,必须事前先获取该信号量
互斥信号量 嵌套(递归)资源访问 如果Task1调用 Routinea,而 RoutineA又调用 Routine,并且三者访问相同的共享资源,就 发生了递归共享资源的访问同步问题 Task1 一个递归的互斥信 号量允许嵌套锁定 )共享资源 Routinea 互斥信号量,而不 引起死锁。 Routine 电子科技大学嵌入式件工程中心 EsE匚
电子科技大学嵌入式软件工程中心 Task1 RoutineA RoutineB 互斥信号量 • 嵌套(递归)资源访问 – 如果Task1调用RoutineA,而RoutineA又调用 RoutineB,并且三者访问相同的共享资源,就 发生了递归共享资源的访问同步问题。 共享资源 一个递归的互斥信 号量允许嵌套锁定 互斥信号量,而不 引起死锁