MS-RTOS 互斥量

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

MS-RTOS 互斥量

本章将介绍 MS-RTOS 互斥量的使用。

互斥量相关 API

下表展示了互斥量相关的 API 在两个权限空间下是否可用:

API用户空间内核空间
ms_mutex_create
ms_mutex_destroy
ms_mutex_lock
ms_mutex_trylock
ms_mutex_unlock

ms_mutex_create()

  • 描述 创建一个互斥量

  • 函数原型

ms_err_t ms_mutex_create(const char *name, ms_ipc_opt_t opt, ms_handle_t *mutexid);
  • 参数
输入/输出参数描述
[in]name互斥量的名字,不能为空指针
[in]opt互斥量的选项
[out]mutexid互斥量的 ID,不能为空指针

opt 参数可以取如下的值:

含义
MS_WAIT_TYPE_PRIO按优先级高低规则等待
MS_WAIT_TYPE_FIFO按先来先服务规则等待
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用

  • 示例

static ms_handle_t mutex_id;

int main(int argc, char *argv[])
{
    ms_mutex_create("mutex", MS_WAIT_TYPE_PRIO, &mutex_id);

    return 0;
}

ms_mutex_destroy()

  • 描述 销毁一个互斥量

  • 函数原型

ms_err_t ms_mutex_destroy(ms_handle_t mutexid);
  • 参数
输入/输出参数描述
[in]mutexid互斥量的 ID
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用

  • 示例

static ms_handle_t mutex_id;

int main(int argc, char *argv[])
{
    ms_mutex_create("mutex", MS_WAIT_TYPE_PRIO, &mutex_id);

    // do some thing

    ms_mutex_destroy(mutexid);

    return 0;
}

ms_mutex_lock()

  • 描述 锁住一个互斥量

  • 函数原型

ms_err_t ms_mutex_lock(ms_handle_t mutexid, ms_tick_t timeout);
  • 参数
输入/输出参数描述
[in]mutexid互斥量的 ID
[in]timeout等待的超时时间
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,在内核锁定期间调用,timeout 必须为 MS_TIMEOUT_NO_WAIT,不能在内核启动前调用,与 ms_mutex_unlock 配对使用

  • 示例ms_mutex_unlock

ms_mutex_trylock()

  • 描述 尝试锁住一个互斥量

  • 函数原型

ms_err_t ms_mutex_trylock(ms_handle_t mutexid);
  • 参数
输入/输出参数描述
[in]mutexid互斥量的 ID
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,不能在内核启动前调用,与 ms_mutex_unlock 配对使用

  • 示例ms_mutex_unlock

ms_mutex_unlock()

  • 描述 解锁一个互斥量

  • 函数原型

ms_err_t ms_mutex_unlock(ms_handle_t mutexid);
  • 参数
输入/输出参数描述
[in]mutexid互斥量的 ID
  • 返回值 MS-RTOS 内核错误码

  • 注意事项 不能在中断中调用,不能在内核启动前调用,与 ms_mutex_lock 配对使用

  • 示例

static ms_handle_t mutex_id;

int main(int argc, char *argv[])
{
    ms_mutex_create("mutex", MS_WAIT_TYPE_PRIO, &mutex_id);

    ms_mutex_lock(mutex_id, MS_TIMEOUT_FOREVER);
    
    // do some thing

    ms_mutex_unlock(mutex_id);

    ms_mutex_destroy(mutexid);

    return 0;
}
文档内容是否对您有所帮助?
有帮助
没帮助