新闻  |   论坛  |   博客  |   在线研讨会
RT-Thread线程同步
15695104076 | 2023-06-16 13:49:45    阅读:100   发布文章

第五天

我今天学习的是RT-Thread的线程同步。

线程同步的基本概念是:1、同步是指按预定的先后次序进行运行;2、在访问临界区的时候只允许一个 (或一类) 线程运行。

信号量是一种轻型的用于解决线程间同步问题的内核对象,线程可以获取或释放它,从而达到同步或互斥的目的。假如信号量值为 5,则表示共有 5 个信号量实例可以被使用,当信号量实例数目为零时,再申请该信号量的线程就会被挂起在该信号量的等待队列上,等待可用的信号量实例。信号量是一种非常灵活的同步方式,可以运用在多种场合中。形成锁、同步、资源计数等关系,也能方便的用于线程与线程、中断与线程间的同步中。但使用信号量会导致的另一个潜在问题是线程优先级翻转问题,在信号量中,因为已经不存在实例,线程递归持有会发生主动挂起,最终形成死锁。

互斥量是特殊的二值信号量,互斥量不同于二值信号量的地方在于:互斥量具有独占性、递归性、优先级继承机制。互斥量只有两种状态:开锁和闭锁。互斥量支持防优先级翻转,递归访问,互斥所有权,实现对临界资源的独占式处理。

事件集也是线程间同步的机制之一,一个事件集可以包含多个事件,利用事件集可以完成一对多,多对多的线程间同步可以实现满足多个条件时候才实现同步这种多个事件的集合可以用一个 32 位无符号整型变量来表示,变量的每一位代表一个事件,线程通过逻辑与或逻辑或将一个或多个事件关联起来,形成事件组合。事件的逻辑或也称为是独立型同步,指的是线程与任何事件之一发生同步;事件逻辑与也称为是关联型同步,指的是线程与若干事件都发生同步。事件集有以下特点:1事件只与线程相关,事件间相互独立:每个线程可拥有 32 个事件标志,采用一个 32 bit 无符号整型数进行记录,每一个 bit 代表一个事件;2事件仅用于同步,不提供数据传输功能3事件无排队性,即多次向线程发送同一事件 (如果线程还未来得及读走),其效果等同于只发送一次。事件集可使用于多种场合,它能够在一定程度上替代信号量,用于线程间同步。一个线程或中断服务例程发送一个事件给事件集对象,而后等待的线程被唤醒并对相应的事件进行处理与信号量不同的是,事件的发送操作在事件未清除前,是不可累计的,而信号量的释放动作是累计的

当事件只用到一个事件时,也就是值只用到一位时,事件和信号量的效果相同。事件可以看成信号量的进化,是信号量的全集。信号量可以看成是事件的子集。在某一条件下,事件和信号量效果相同,可以认为是等价的。当只需一对一同步的时候,用信号量就够了。当一对多,或多对多时用事件。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
最近文章
RT-Thread线程同步
2023-06-16 13:49:45
RT-Thread中断管理
2023-06-16 13:17:38
STM32I2C协议
2023-06-16 13:15:53
推荐文章
最近访客