博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8.互斥量的使用--mutex
阅读量:4099 次
发布时间:2019-05-25

本文共 1405 字,大约阅读时间需要 4 分钟。

1.举例理解互斥量

 停车场(只有一个停车位)

----------------

        car1

----------------

car1进去后给停车场上锁,其他车就进不去了。

car2    car3    car4    

同时只能有一个线程占有公共资源。

互斥是一种保护共享资源的方法。当一个线程拥有互斥的时候,另一个线程若是等待锁, 则其就会被挂起,从而保证只有一个线程会操作共享数据。

2.例程源码解析及互斥的相关操作

初始化(静态)/创建(动态)、  获取    、    释放    、     detach脱离(静态)/删除(动态)

互斥的定义:

/* 互斥量控制块 */static struct rt_mutex static_mutex;/* 指向互斥量的指针 */static rt_mutex_t dynamic_mutex = RT_NULL;

动态静态互斥创建:

/* 初始化静态互斥量 */    result = rt_mutex_init(&static_mutex, "smutex", RT_IPC_FLAG_FIFO);    if (result != RT_EOK)    {        rt_kprintf("init static mutex failed.\n");        return -1;    }    /* 创建一个动态互斥量 */    dynamic_mutex = rt_mutex_create("dmutex", RT_IPC_FLAG_FIFO);    if (dynamic_mutex == RT_NULL)    {        rt_kprintf("create dynamic mutex failed.\n");        return -1;    }

获取互斥

result = rt_mutex_take(&static_mutex, 10);

释放互斥

rt_mutex_release(&static_mutex);

静态互斥脱离:

rt_mutex_detach(&static_mutex);

动态互斥删除:

rt_mutex_delete(dynamic_mutex);

3.互斥的本质--二值信号量

互斥量初始化完成后是打开的,任意一个线程都能获取

4.互斥的使用注意事项

        互斥不能在中断中获取、释放、互斥不能出现在中断中!!!!

5.信号量和互斥的比较

        互斥量只能由获取互斥量的任务释放---解铃还需系铃人

        互斥量相当于一把钥匙,只有获取钥匙的线程才能获取公共资源。

        信号量可能导致优先级反转,互斥量不会。

举例:

信号量强调的是做事情的顺序:先做什么,后做什么

以电子触摸屏为例:  

touch_panel;pen_int()//触摸笔中断,触摸后发生{	...	rt_sem_release(dynamic_sem);//释放信号量	...}while(1){		if(RT_EOK==rt_sem_take(dynamic_sem));//获取到信号量	{		x=...//计算触摸的X Y位置		y=...	}	else	{		.....	}}

互斥量:

IIC总线上有A、B、C设备。

A         B        C    

    A在用IIC的时候把IIC资源锁上,B、C无法对IIC总线操作,同时只能有一个设备在IIC总线上。

转载地址:http://riwsi.baihongyu.com/

你可能感兴趣的文章
ORACLE模糊查询优化浅谈
查看>>
关于ORACLE查询列加()or () 报ORA-00923:未找找到要求的FROM关键字
查看>>
zgrep 与 grep 区别
查看>>
sftp文件传输
查看>>
论计算机基础的重要性
查看>>
Velocity indxeOf() 过滤非法字符
查看>>
Outlook 中间区域无法显示邮件内容解决方法
查看>>
2015——致我那终将逝去的青春
查看>>
2016——个人年度总结
查看>>
2017——新的开始,加油!
查看>>
【设计模式】—-(3)抽象工厂模式(创建型)
查看>>
【关于选择】—-(1)放下努力和坚持吧
查看>>
【设计模式】—-(抽象工厂模式和工厂方法模式区别)
查看>>
【设计模式】—-(4)建造者模式(创建型)
查看>>
【设计模式】—-(5)原型模式(创建型)
查看>>
【设计模式小结】—-创建型模式
查看>>
【设计模式】—-(6)适配器模式(结构型)
查看>>
【设计模式】—-(7)桥接模式(结构型)
查看>>
【设计模式】—-(8)装饰模式(结构型)
查看>>
【设计模式】—-(9)组合模式(结构型)
查看>>