1,信号量
信号量是一种轻型的用于解决线程间同步问题的内核对象,线程可以获取或释放它,从而达到同步或互斥的目的。理解资源计数适合于线程间工作处理速度不匹配的场合;信号量在大于0时才能获取,在中断、线程中均可释放信号量。
为了体现使用信号量来达到线程间的同步,设计了producer、consumer两个线程,producer优先级为24,consumer 优先级为26。线程producer每生产一个数据进入20ms延时,生产10个数据后结束。线程consumer每消费一个数据进入50ms延时,消费10个数据后结束。用户可以体会到到,信号量在线程同步以及资源计数时起到的作用。

(1)在tshell线程中初始化3个信号量,lock初始化为1(用作保护临界区,保护数组), empty初始化为5, full初始化为0;信号量情况:
(2)创建并启动线程producer,优先级为24;创建并启动线程和consumer,优先级为26;
(3)在操作系统的调度下,producer优先级高,首先被投入运行;
(4)producer获取一个empty信号量,产生一个数据放入数组,再释放一个full信号量,然后进入2 OS Tick延时;之后的信号量情况:
本文介绍了RT-thread操作系统中信号量和互斥量的概念及其应用场景。通过生产者-消费者示例解释了信号量如何实现线程同步和资源计数,强调了信号量在线程速度不匹配时的重要性。同时,对比了信号量与互斥量的区别,如互斥量支持递归访问和防止优先级反转。通过线程优先级继承的例子展示了互斥量在解决优先级反转问题上的作用。
订阅专栏 解锁全文
923

被折叠的 条评论
为什么被折叠?



