MS-RTOS 读写锁

更新时间:
2023-08-09
下载文档

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;
}
文档内容是否对您有所帮助?
有帮助
没帮助