$darkmode
RuiChing API 参考手册
V0.9.1

提供具有优先级继承的互斥访问机制 更多...

结构体

struct  rt_mutex
 互斥量结构体 更多...
 

类型定义

typedef struct rt_mutexrt_mutex_t
 互斥量类型指针定义
 

函数

rt_err_t rt_mutex_init (rt_mutex_t mutex, const char *name, rt_uint8_t flag)
 初始化静态互斥量 更多...
 
rt_err_t rt_mutex_detach (rt_mutex_t mutex)
 脱离静态互斥量 更多...
 
rt_mutex_t rt_mutex_create (const char *name, rt_uint8_t flag)
 创建动态互斥量 更多...
 
rt_err_t rt_mutex_delete (rt_mutex_t mutex)
 删除动态互斥量 更多...
 
rt_err_t rt_mutex_take (rt_mutex_t mutex, rt_int32_t timeout)
 阻塞式获取互斥量 更多...
 
rt_err_t rt_mutex_trytake (rt_mutex_t mutex)
 尝试立即获取互斥量 更多...
 
rt_err_t rt_mutex_release (rt_mutex_t mutex)
 释放互斥量 更多...
 
rt_err_t rt_mutex_control (rt_mutex_t mutex, int cmd, void *arg)
 控制互斥量的行为 更多...
 

详细描述

提供具有优先级继承的互斥访问机制

RT-Thread 互斥锁特性:

典型应用场景:

函数说明

◆ rt_mutex_init()

rt_err_t rt_mutex_init ( rt_mutex_t  mutex,
const char *  name,
rt_uint8_t  flag 
)

初始化静态互斥量

该函数初始化由用户提供内存的互斥量。适用于静态分配场景

参数
[in]mutex互斥量指针
[in]name互斥量名称
[in]flag等待标志位
标志位 含义
RT_IPC_FLAG_FIFO 先进先出方式等待
RT_IPC_FLAG_PRIO 按线程优先级等待(高优先级先获取)
返回值
RT_EOK成功
!RT_EOK失败
注解
  • 互斥量名称的最大长度由 rtconfig.h 中定义的 RT_NAME_MAX 宏指定, 多余部分会被自动截掉

◆ rt_mutex_detach()

rt_err_t rt_mutex_detach ( rt_mutex_t  mutex)

脱离静态互斥量

将静态互斥量从内核中移除,但不释放其占用的内存

参数
[in]mutex互斥量指针
返回值
RT_EOK成功
!RT_EOK失败
警告
  • 需要脱离的静态互斥量必须是由 rt_mutex_init() 使用初始化

◆ rt_mutex_create()

rt_mutex_t rt_mutex_create ( const char *  name,
rt_uint8_t  flag 
)

创建动态互斥量

系统自动为互斥量分配内存,适用于运行时创建互斥量的场景

参数
[in]name互斥量名称
[in]flag等待标志位
标志位 含义
RT_IPC_FLAG_FIFO 先进先出方式等待
RT_IPC_FLAG_PRIO 按线程优先级等待(高优先级先获取)
返回值
!RT_NULL成功
RT_NULL失败
注解
  • 互斥量名称的最大长度由 rtconfig.h 中定义的 RT_NAME_MAX 宏指定, 多余部分会被自动截掉

◆ rt_mutex_delete()

rt_err_t rt_mutex_delete ( rt_mutex_t  mutex)

删除动态互斥量

释放通过 rt_mutex_create() 创建的互斥量及其占用的内存

参数
[in]mutex互斥量指针
返回值
RT_EOK成功
!RT_EOK失败
警告

◆ rt_mutex_take()

rt_err_t rt_mutex_take ( rt_mutex_t  mutex,
rt_int32_t  timeout 
)

阻塞式获取互斥量

获取失败会阻塞线程指定时间直到成功或超时

参数
[in]mutex互斥量指针
[in]timeout超时时间
标志位 含义
RT_WAITING_FOREVER 永久等待
RT_WAITING_NO 不等待立即返回
其他数值 timeout * 系统 tick 超时时间
返回值
RT_EOK成功
-RT_ETIMEOUT超时
!RT_EOK失败

◆ rt_mutex_trytake()

rt_err_t rt_mutex_trytake ( rt_mutex_t  mutex)

尝试立即获取互斥量

若互斥量不可用则立即返回,不阻塞

参数
[in]mutex互斥量指针
返回值
RT_EOK成功
!RT_EOK失败

◆ rt_mutex_release()

rt_err_t rt_mutex_release ( rt_mutex_t  mutex)

释放互斥量

当前线程释放已获取的互斥量,可能唤醒等待队列中的线程

参数
[in]mutex互斥量指针
返回值
RT_EOK成功
!RT_EOK失败

◆ rt_mutex_control()

rt_err_t rt_mutex_control ( rt_mutex_t  mutex,
int  cmd,
void *  arg 
)

控制互斥量的行为

通过命令设置或获取互斥量属性

参数
[in]mutex互斥量指针
[in]cmd控制命令
[in]arg命令参数指针
返回值
RT_EOK成功
!RT_EOK失败