队列的本质就是环形buff,加了互斥操作,加了阻塞-唤醒.
1.介绍一下环形BUFF
2.阻塞和唤醒
在我们队列中是有一个读list 链表 和 一个写list链表 他们就是用来保存 读 或者 写阻塞 的任务
假设我们 就绪链表中有A 和 B两个任务 他们正常情况下都是轮流运行,
这个时候 A 想读队列,但是没有数据被阻塞
这个时候A 任务就会从就绪链表[1]中剔除出来,挂载到 队列里面的读链表中
某个时候 B开始往 队列中写数据
那这个时候 我们的 B 会唤醒 读list中的A
这个时候我们的A 会从读 list 中剔除 加载到 就绪链表[1]中,A又可以开始重新调度了.
3.队列集
队列集其实也是队列,只不过我们的普通队列里面保存的是数据,队列集保存的是要监测的队列句柄handle,为了保证监测的不遗漏,那我们队列集的总长度,就是要监测的队列的总长度.
下面就是队列集的使用过程
一定要注意,我们只是监测对应的消息队列,不是存储对应的数据,要得到数据,还是要通过对应的句柄来获取的.