互斥量
互斥量(互斥锁)是用于线程间互斥访问的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)