rtx任务间通信--互斥量
来源:互联网 发布:剑网三有挂机软件么 编辑:程序博客网 时间:2024/05/17 08:44
void os_mut_init (
OS_ID mutex ); /* The mutex to initialize */
初始化一个互斥量,互斥量内部计数计为0, mutex类型必须为OS_MUT.在调用互斥量相关函数之前,必须用该函数先初始化互斥量.
OS_RESULT os_mut_wait (
OS_ID mutex, /* The mutex to acquire */
U16 timeout ); /* Length of time to wait */
返回值:
OS_R_OK 获取到互斥量,给互斥量上锁后返回
OS_R_MUT 任务挂起,在超时之前获取到互斥量,给互斥量上锁后返回
OS_R_TMO 等待互斥量超时返回.
该函数用于获取一个互斥量,
1. 如果互斥量没有上锁(计数计为0),将互斥量计数计加1后返回OS_R_OK,
2. 如果互斥量已上锁,调用该函数的任务会挂起(timeout !=0 的情况),
3. 在超时前获取到互斥量,该函数返回OS_R_MUT,超时后返回OS_R_TMO.
互斥量使用优先级继承机制解决优先级反转的问题,如一全局变量G受到互斥量的保护,任务A优先级为1,需要访问该全局变量,所以先占有了互斥量,
在任务A还在访问完全局变量时,切换到了优先级为2的任务B运行,B也想访问全局变量G,于是调用os_mut_wait获取互斥量,但是任务A现在占有互
斥量且优先级比任务B低,这时os_mut_wait将任务A的优先级改为2(任务B的优先级),让任务A先运行,任务A访问完全局变量G,调用os_mut_release
释放互斥量时,会将任务A优先级恢复为1.
参数mutex类型必须为OS_MUT, timeout为超时时间,单位为系统tick, 0和0xffff为特殊值:
timeout=0时,获取不到互斥量会立即返回OS_R_TMO
timeout=0xffff表示无限等待
OS_RESULT os_mut_release (
OS_ID mutex ); /* The mutex to release */
返回值:
OS_R_OK 互斥量解锁成功
OS_R_NOK 解锁出错: 1. 互斥量内部计数计为0 2. 调用该函数的任务不是互斥量的拥有者(如任务A上锁互斥量,但是任务B去解锁)
如果任务A占有互斥量M,任务A可以继续调用os_mut_wait获取互斥量M,这时os_mut_wait只是简单的将互斥量计数计加1,然后返回。
调用os_mut_release解锁互斥量时,
1.如果互斥量内部计数计>=1,将计数计减1,返回OS_R_OK.
2.互斥量内部计数计为0, 返回OS_R_NOK
OS_ID mutex ); /* The mutex to initialize */
初始化一个互斥量,互斥量内部计数计为0, mutex类型必须为OS_MUT.在调用互斥量相关函数之前,必须用该函数先初始化互斥量.
OS_RESULT os_mut_wait (
OS_ID mutex, /* The mutex to acquire */
U16 timeout ); /* Length of time to wait */
返回值:
OS_R_OK 获取到互斥量,给互斥量上锁后返回
OS_R_MUT 任务挂起,在超时之前获取到互斥量,给互斥量上锁后返回
OS_R_TMO 等待互斥量超时返回.
该函数用于获取一个互斥量,
1. 如果互斥量没有上锁(计数计为0),将互斥量计数计加1后返回OS_R_OK,
2. 如果互斥量已上锁,调用该函数的任务会挂起(timeout !=0 的情况),
3. 在超时前获取到互斥量,该函数返回OS_R_MUT,超时后返回OS_R_TMO.
互斥量使用优先级继承机制解决优先级反转的问题,如一全局变量G受到互斥量的保护,任务A优先级为1,需要访问该全局变量,所以先占有了互斥量,
在任务A还在访问完全局变量时,切换到了优先级为2的任务B运行,B也想访问全局变量G,于是调用os_mut_wait获取互斥量,但是任务A现在占有互
斥量且优先级比任务B低,这时os_mut_wait将任务A的优先级改为2(任务B的优先级),让任务A先运行,任务A访问完全局变量G,调用os_mut_release
释放互斥量时,会将任务A优先级恢复为1.
参数mutex类型必须为OS_MUT, timeout为超时时间,单位为系统tick, 0和0xffff为特殊值:
timeout=0时,获取不到互斥量会立即返回OS_R_TMO
timeout=0xffff表示无限等待
OS_RESULT os_mut_release (
OS_ID mutex ); /* The mutex to release */
返回值:
OS_R_OK 互斥量解锁成功
OS_R_NOK 解锁出错: 1. 互斥量内部计数计为0 2. 调用该函数的任务不是互斥量的拥有者(如任务A上锁互斥量,但是任务B去解锁)
如果任务A占有互斥量M,任务A可以继续调用os_mut_wait获取互斥量M,这时os_mut_wait只是简单的将互斥量计数计加1,然后返回。
调用os_mut_release解锁互斥量时,
1.如果互斥量内部计数计>=1,将计数计减1,返回OS_R_OK.
2.互斥量内部计数计为0, 返回OS_R_NOK
0 0
- rtx任务间通信--互斥量
- rtx任务间通信--互斥量
- rtx任务间通信--信号量
- rtx任务间通信--信号量
- rtx任务间的通信--event flags
- 3. rtx任务间的通信--event flags
- rtx任务管理
- rtx任务管理
- ACE 任务间通信
- ACE:任务间通信
- 任务间通信机制
- vxworks任务间通信
- rtx
- RTX
- VxWorks任务间通信机制
- ACE 任务ACE_Task间通信
- Vxworks任务间的通信
- 嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度
- epoll事件处理机制详解
- 单例模式Singleton实现(C++&Java)
- Django 安全漏洞
- Dice - HDU 5012 搜索
- leetcode:Construct Binary Tree from Preorder and Inorder Traversal
- rtx任务间通信--互斥量
- 自己动手写CPU之第八阶段(3)——转移指令实现过程1
- extjs4.0的高级组件tree上
- 将一行英文中每个单词首字母转换为大写字母
- HDU 2807 The Shortest Path
- hdu 5037 Frog(贪心)
- apache php mysql centos6.5安装方法
- Wang Xifeng's Little Plot - HDU 5024 搜索
- Android Toast显示动画