0、思考
如果读取线程没有数据可以读,写者线程没有空间可以写;怎么才可以让它有数据时读线程激活,有空间写时写线程激活?
1、相关api
CONDITION_VARIABLE
InitializeConditionVariable
SleepConditionVariableCS
SleepConditionVariableSRW
WakeConditionVariable
WakeAllConditionVariable
2、写在前面
条件变量:利用线程间共享的全局变量(关键段、读写锁)进行同步的一种机制,主要包括两个动作:一个线程等待某个条件为真,而将自己挂起;另一
个线程使的条件成立,并通知等待的线程继续。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。
3、api说明
typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE;
typedef struct _RTL_CONDITION_VARIABLE {
PVOID Ptr;
} RTL_CONDITION_VARIABLE, *PRTL_CONDITION_VARIABLE;
// 初始化条件变量
WINBASEAPI
VOID
WINAPI
InitializeConditionVariable (
__out PCONDITION_VARIABLE ConditionVariable
);
// 解锁CS,等待CV,函