消息队列(来自百度百科)
消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。消息队列是随内核持续的。
描述程序运行的过程。
首先创建了三个线程,三个线程处于同一优先级,但由于thread1首先被启动,所以它先运行,thread2,3紧随其后。thread3中调用了delay 5s,所以一开始便被挂起了。thread1由于要等消息队列的消息,而此时消息队列为空,所以也被挂起了。
所以thread2便开始调用rt_mq_send() 发送消息,但由于thread1和thread2处于同一个优先级,所以虽然thread1等待的条件满足了,但仍旧不能从就绪态转为运行态。等到thread2的时间片用完之后(这里是50),thread1便开始运行。也就出现了如下的情况,thread2打印的信息被打断了。
thread2: send message - this is message No.7
thread2: send message - this is message No.8
thread2: send message - this is message No.9
thread2: send message - this is message No.10