zoukankan      html  css  js  c++  java
  • 互斥量

    互斥量

    ​ 互斥量(互斥锁)是用于线程间互斥访问的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)
    
  • 相关阅读:
    Top的VIRT是什么
    python的日志logging模块性能以及多进程
    Python的多进程锁的使用
    extjs动态导入
    初识Dubbo 系列之5-Dubbo 成熟度
    POJ 2151 Check the difficulty of problems(概率dp)
    自考
    疯狂Java学习笔记(70)-----------挚爱Java
    2014年辛星解读css第三节
    atitit。流程图的设计与制作&#160;attilax&#160;总结
  • 原文地址:https://www.cnblogs.com/zhang-han/p/14123097.html
Copyright © 2011-2022 走看看