等待队列

  • MadWaitQueue.h
  • MadWaitQueue.c

MadOS 等待队列事件

名称 说明
MAD_WAIT_EVENT_NONE “空”事件
MAD_WAIT_EVENT_READ 等待读
MAD_WAIT_EVENT_WRITE 等待写
MAD_WAIT_EVENT_ERR 等待错误

用户可自定义更多事件

MadOS 等待队列结构体

名称 说明
MadWait_t 等待对象
MadWaitQ_t 等待队列

一个等待队列中包含多个等待对象

madWaitQInit

MadBool madWaitQInit(MadWaitQ_t *wq, MadU8 n)
1

初始化等待队列(动态分配n个等待对象)

参数名 方向 说明
wq in 等待队列指针
n in 等待队列深度
返回值 说明
MFALSE 失败
MTRUE 成功

madWaitQShut

void madWaitQShut(MadWaitQ_t *wq)
1

关闭等待队列(动态释放所有等待对象)

参数名 方向 说明
wq in 等待队列指针

madWaitQAdd

MadBool madWaitQAdd(MadWaitQ_t *wq, MadSemCB_t **locker, MadU8 event)
1

加入等待队列

参数名 方向 说明
wq in 等待队列指针
locker in 信号量指针
event in 等待队列事件
返回值 说明
MFALSE 失败
MTRUE 成功
  • eventlocker组成等待对象,加入等待队列。
  • event触发时,释放等待队列中第一个匹配该事件的等待对象的locker

madWaitQScan

MadBool madWaitQScan(MadWaitQ_t *wq, MadSemCB_t **locker, MadU8 event, MadWait_t *rw)
1

查找等待对象(匹配的等待对象会从等待队列中删除)

参数名 方向 说明
wq in 等待队列指针
locker in 信号量指针(NULL则忽略)
event in 等待队列事件(NULL则忽略)
rw out 等待对象指针
返回值 说明
MFALSE 失败(rw无意义)
MTRUE 成功(rw返回匹配的等待对象)
  • lockerevent不可同时为NULL,否则无意义。
  • 等待队列不会回收locker最终指向的内存空间。

madWaitQSignal()

MadBool madWaitQSignal(MadWaitQ_t *wq, MadU8 event)
1

触发等待事件(匹配的等待对象会从等待队列中删除)

参数名 方向 说明
wq in 等待队列指针
event in 等待队列事件
返回值 说明
MFALSE 失败
MTRUE 成功
  • 等待队列不会回收locker最终指向的内存空间。

madWaitQScanEvent(wq, event, rw)

MadBool madWaitQScan(MadWaitQ_t *wq, MadSemCB_t **locker, MadU8 event, MadWait_t *rw)
1
参数
locker NULL

madWaitQScanLocker(wq, locker, rw)

MadBool madWaitQScan(MadWaitQ_t *wq, MadSemCB_t **locker, MadU8 event, MadWait_t *rw)
1
参数
event MAD_WAIT_EVENT_NONE

madWaitQRemove(wq, locker, event)

MadBool madWaitQScan(MadWaitQ_t *wq, MadSemCB_t **locker, MadU8 event, MadWait_t *rw)
1
参数
rw NULL