MS-RTOS 读写锁
本章将介绍 MS-RTOS 读写锁的使用。
读写锁相关 API
下表展示了读写锁相关的 API 在两个权限空间下是否可用:
API | 用户空间 | 内核空间 |
---|---|---|
ms_rwlock_create | ● | ● |
ms_rwlock_destroy | ● | ● |
ms_rwlock_lock_read | ● | ● |
ms_rwlock_trylock_read | ● | ● |
ms_rwlock_lock_write | ● | ● |
ms_rwlock_trylock_write | ● | ● |
ms_rwlock_unlock | ● | ● |
ms_rwlock_create()
描述 创建一个读写锁
函数原型
ms_err_t ms_rwlock_create(const char *name, ms_ipc_opt_t opt,
ms_handle_t *rwlockid);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | name | 读写锁的名字,不能为空指针 |
[in] | opt | 读写锁的选项 |
[out] | rwlockid | 读写锁的 ID,不能为空指针 |
opt 参数可以取如下的值:
宏 | 含义 |
---|---|
MS_WAIT_TYPE_PRIO | 按优先级高低规则等待 |
MS_WAIT_TYPE_FIFO | 按先来先服务规则等待 |
返回值 MS-RTOS 内核错误码
注意事项 不能在中断中调用
示例
static ms_handle_t rwlock_id;
int main(int argc, char *argv[])
{
ms_rwlock_create("rwlock", MS_WAIT_TYPE_PRIO, &rwlock_id);
return 0;
}
ms_rwlock_destroy()
描述 销毁一个读写锁
函数原型
ms_err_t ms_rwlock_destroy(ms_handle_t rwlockid);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | rwlockid | 读写锁的 ID |
返回值 MS-RTOS 内核错误码
注意事项 不能在中断中调用
示例
static ms_handle_t rwlock_id;
int main(int argc, char *argv[])
{
ms_rwlock_create("rwlock", MS_WAIT_TYPE_PRIO, &rwlock_id);
// do some thing
ms_rwlock_destroy(rwlockid);
return 0;
}
ms_rwlock_lock_read()
描述 以读的方式锁住一个读写锁
函数原型
ms_err_t ms_rwlock_lock_read(ms_handle_t rwlockid, ms_tick_t timeout);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | rwlockid | 读写锁的 ID |
[in] | timeout | 等待的超时时间 |
返回值 MS-RTOS 内核错误码
注意事项 不能在中断中调用,在内核锁定期间调用,timeout 必须为
MS_TIMEOUT_NO_WAIT
,不能在内核启动前调用,与ms_rwlock_unlock
配对使用示例 见
ms_rwlock_unlock()
ms_rwlock_trylock_read()
描述 尝试以读的方式锁住一个读写锁
函数原型
ms_err_t ms_rwlock_trylock_read(ms_handle_t rwlockid);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | rwlockid | 读写锁的 ID |
返回值 MS-RTOS 内核错误码
注意事项 无
示例 无
ms_rwlock_lock_write()
描述 以写的方式锁住一个读写锁
函数原型
ms_err_t ms_rwlock_lock_write(ms_handle_t rwlockid, ms_tick_t timeout);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | rwlockid | 读写锁的 ID |
[in] | timeout | 等待的超时时间 |
返回值 MS-RTOS 内核错误码
注意事项 不能在中断中调用,在内核锁定期间调用,timeout 必须为
MS_TIMEOUT_NO_WAIT
,不能在内核启动前调用,与ms_rwlock_unlock
配对使用示例 见
ms_rwlock_unlock()
ms_rwlock_trylock_write()
描述 尝试以写的方式锁住一个读写锁
函数原型
ms_err_t ms_rwlock_trylock_write(ms_handle_t rwlockid);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | rwlockid | 读写锁的 ID |
返回值 MS-RTOS 内核错误码
注意事项 无
示例 无
ms_rwlock_unlock()
描述 解锁一个读写锁
函数原型
ms_err_t ms_rwlock_unlock(ms_handle_t rwlockid);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | rwlockid | 读写锁的 ID |
返回值 MS-RTOS 内核错误码
注意事项 不能在中断中调用,不能在内核启动前调用
示例
static ms_handle_t rwlock_id;
int main(int argc, char *argv[])
{
ms_rwlock_create("rwlock", MS_WAIT_TYPE_PRIO, &rwlock_id);
ms_rwlock_lock_write(rwlock_id, MS_TIMEOUT_FOREVER);
// do some thing
ms_rwlock_unlock(rwlock_id);
ms_rwlock_destroy(rwlockid);
return 0;
}