消息队列控制块代码逐行说明
(1)、指向队列消息存储区的起始位置的地址(即队首)
(2)、指向队列消息存储区的结束位置的地址(即队尾)
(3)、指向队列消息存储区下一个可用消息空间
(4)(5)是一对互斥的变量,使用联合体来确保这两个变量不会同时出现。当结构体用于队列的时候,使用(4),含义是:指向出队消息空间的最后一个(利用指针读取消息的内容)。当结构体用于互斥量的时候,使用(5),含义是:用于计数,记录递归互斥量被调用的次数。
(6)、(入队阻塞)用于发送消息阻塞的一个列表,用于保存阻塞在队列的任务(入队阻塞的时候,记录任务,任务按照优先级在列表中排序,由于消息队列已经满了,想要发送消息的任务就无法发送消息)
(7)、(出队阻塞)获取消息阻塞的一个列表,用来保存阻塞在队列的任务,任务按照优先级进行排序,由于队列是空的,想要获取消息是无法获取消息的。
(8)、用于记录当前消息队列的消息个数(如果消息队列用于信号量的时候,这个值代表有效信号量的个数)
用于信号量控制块的时候,表示有效信号量的个数(可用的信号量的个数)(对于二值信号量和互斥信号量,这个值就是1和0,对于计数信号量,这个值表示可用资源的多少)
(9)、表示消息队列的长度(可以存放多少个消息)
用于信号量控制块的时候,这个值表示最大的信号量的可用个数(对于二值信号量和互斥信号量值为1,对于计数信号量,这个值表示最大信号量的个数)
(10)、表示单个消息的大小 (单位是字节)
用于信号量控制块的时候,这个值为0,表示无存储空间
(11)(出队)队列上锁之后,存储从队列收到的一个列表项的数目,即出队的数量,如果队列没有上锁,就会设置为一个具体的宏
(12) (入队)队列上锁之后,存储从队列发送的一个列表项的数目,即入队的数量,如果队列没有上锁,就会设置为一个具体的宏