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

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

1.IPC(inter process communication)    

        RTT中的IPC:信号量、互斥锁、信号、消息队列、邮箱

2.理解信号量(semaphore )

             停车场

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

1             2                3

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

        管理员(信号量)

///

car1     car2     car3     car4      car5                        car6 car7

一开始只有3个车位,管理员让123先进,45在外面等着,123走了,67来了,管理员让456进去了,7在外面等着。

车位可以理解为公共资源,车就是我们的线程,线程想去占用公共资源,公共资源有才能使用,没有就得等着。

这里管理员的角色就是我们的信号量。

3、例程源码解析及信号量的相关操作

初始化/创建(建停车场)、获取(车想停进去)、释放(车开走)、删除/脱离(毁掉停车场)

tips:在RT-Thread中带   _t   的都是指针。

API:

初始化和创建

rt_err_t result; //静态信号量的创建    /* 初始化静态信号量,初始值是0 */    result = rt_sem_init(&static_sem, "ssem", 0, RT_IPC_FLAG_FIFO);
static rt_sem_t dynamic_sem = RT_NULL;dynamic_sem = rt_sem_create("dsem", 0, RT_IPC_FLAG_FIFO);

获取信号量

result = rt_sem_take(&static_sem, 10);//静态、动态信号量的获取都是这个函数,等待时间可设置,一般是0(不等待)或者 RT_WAITING_FROVER(等到天荒地老)

释放信号量,让线程能够获取信号量

rt_sem_release(&static_sem);//当信号量值大于0,则线程可以获取信号量,信号量小于0,线程只能等待

脱离静态信号量,仅针对静态信号量

rt_sem_detach(&static_sem);

删除动态信号量,仅针对动态信号量

rt_sem_delete(dynamic_sem);

信号量使用注意事项:

不要尝试在中断服务程序中获取信号量,可以在中断中释放信号量。

例如:创建一个线程获取信号量,获取信号量之后点亮LED等,在中断中释放信号量,达到一个流水灯的效果。

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

你可能感兴趣的文章
DES加解密
查看>>
TCP/IP协议三次握手与四次握手流程解析
查看>>
PHP 扩展开发 : 编写一个hello world !
查看>>
inet_ntoa、 inet_aton、inet_addr
查看>>
用模板写单链表
查看>>
用模板写单链表
查看>>
链表各类操作详解
查看>>
C++实现 简单 单链表
查看>>
数据结构之单链表——C++模板类实现
查看>>
Linux的SOCKET编程 简单演示
查看>>
正则匹配函数
查看>>
Linux并发服务器编程之多线程并发服务器
查看>>
聊聊gcc参数中的-I, -L和-l
查看>>
[C++基础]034_C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)
查看>>
C语言内存检测
查看>>
Linux epoll模型
查看>>
Linux select TCP并发服务器与客户端编程
查看>>
Linux系统编程——线程池
查看>>
基于Visual C++2013拆解世界五百强面试题--题5-自己实现strstr
查看>>
Linux 线程信号量同步
查看>>