我们编写多线程应用程序的时候,经常需要进行线程同步协作,我们来实践一下用信号量同步线程。请见代码实现与注释分析,
/* 头文件 */
#include <windows.h>
#include <stdio.h>
/* 常量定义 */
#define NUMTHREADS 4
/* 全局变量 */
HANDLE hSemaphore;
/* 函数声明 */
void UseSemaphore(void);
DWORD WINAPI SemaphoreThread(LPVOID lpParam);
/*************************************
* int main(void)
* 功能 演示
*
* 参数 未使用
**************************************/
int main()
{
UseSemaphore() ;
}
/*************************************
* DWORD WaitForAllThread(HANDLE hThread[], DWORD dwNumThread)
* 功能 等待指定的线程都结束
*
* 参数 HANDLE hThread[] 需要等待结束的线程句柄数组
* DWORD dwNumThread 线程句柄数组的大小
**************************************/
DWORD WaitForAllThread(HANDLE hThread[], DWORD dwNumThread)
{
// 等待所有线程结束
DWORD dwWaitResult = WaitForMultipleObjects(
dwNumThread,
hThread, // 线程句柄作为等待对象
TRUE,
INFINITE);
switch (dwWaitResult)
{
case WAIT_OBJECT_0:
printf("\nAll thread exit\n");
break;
def