等待队列
- 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 | 成功 |
- 将event与locker组成等待对象,加入等待队列。
- 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返回匹配的等待对象) |
- locker与event不可同时为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 |