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延时;之后的信号量情况: