互斥量

互斥量

​ 互斥量(互斥锁)是用于线程间互斥访问的IPC对象,它是一种特殊的二值性信号量。当某个线程访问系统中的共享资源时,通过引入互斥量机制,可以保证其他线程无法取得对此共享资源的访问权。

​ 互斥量只有两种状态:LOCKED和UNLOCKED,分别代表加锁和开锁的两种情况。

​ 当有线程持有它时,互斥量处于闭锁状态,由这个线程获得它的所有权。相反,当这个线程释放它时,将对互斥量进行开锁,失去对它的所有权。当一个线程持有互斥量时,其他线程将不能够对它进行开锁或持有它。持有该互斥量的线程也能够再次获得这个“锁“(递归持有)而不被挂起。

​ 在 RT-Thread 中,互斥量控制块是操作系统用于管理互斥量的一个数据结构。

struct rt_mutex
{
    struct rt_ipc_object parent;/**< inherit from ipc_object */
    rt_uint16_t          value;/**< value of mutex */
    rt_uint8_t           original_priority;/**< priority of last thread hold the mutex */
    rt_uint8_t           hold;/**< numbers of thread hold the mutex */
    struct rt_thread    *owner;/**< current owner of mutex */
}
struct rt_mutex   static_mutex;//定义静态互斥量
rt_mutex_t  dynamic_mutex;//定义动态互斥量

初始化与脱离

rt_err_t rt_mutex_init(rt_mutex_t mutex, const char *name, rt_uint8_t flag)
    									RT_IPC_FLAG_FIFO   RT_IPC_FLAG_PRIO
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 time)//RT_WAITING_FOREVER=-1

释放互斥量

rt_err_t rt_mutex_release(rt_mutex_t mutex)
原文地址:https://www.cnblogs.com/zhang-han/p/14123097.html