“生产者消费者”问题是经典的进程同步问题,它是在同一块儿进程地址内不同线程对于资源的利用时避免死锁的问题。
总结了一下网上的windows api函数的用法:
///
用户模式 对事件进行初始化操作
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes, // 安全属性
BOOL bManualReset, // 复位方式
BOOL bInitialState, // 初始状态
LPCTSTR lpName // 对象名称
);
///
用户模式 信号灯
CreateSemaphore函数负责创建信号灯
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, //安全属性
LONG lInitialCount, //初始化计数个数
LONG lMaximumCount, //计数器最大个数
LPCWSTR lpName //命名
);
ReleaseSemaphore函数增加信号灯的计数器
BOOL ReleaseSemaphore(
HANDLE hSemaphore, //信号灯句柄
LONG lReleaseCount, //本次操作增加的计数
LPLONG lpPreviousCount //记录以前的计数
);
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全属性
DWORD dwStackSize, // 堆栈大小
LPTHREAD_START_ROUTINE lpStartAddress, // 线程函数
LPVOID lpParameter, //线程参数
DWORD dwCreationFlags, // 线程创建属性
LPDWORD lpThreadId // 线程ID
);
///
用户模式 互斥体
初始化互斥体
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, //安全属性
BOOL bInitialOwner, //是否被占有
LPCTSTR lpName //命名
);
//可以看出,当CreateSema