Windows环境下多线程编程示例

需积分: 3 1 下载量 56 浏览量 更新于2024-09-16 收藏 3KB TXT 举报
"此示例代码提供了一个多线程应用的简单实现,用于帮助理解如何在C++中创建和管理线程,特别是使用了互斥量(Mutex)来确保线程安全地共享资源。" 在这个多线程例子中,我们主要关注以下几个知识点: 1. **线程创建**:通过调用`CreateThread`函数创建两个线程`Fun1Proc`和`Fun2Proc`。`CreateThread`接收参数,如线程属性、线程入口点函数、传递给线程函数的参数等,然后返回新创建线程的句柄。 2. **线程句柄管理**:创建线程后,需要使用`CloseHandle`函数关闭不再使用的线程句柄,以释放系统资源。在这个例子中,主线程在完成创建线程后,关闭了`hThread1`和`hThread2`。 3. **互斥量(Mutex)**:互斥量是多线程同步对象,用于控制多个线程对共享资源的访问。在本例中,`m_hMutex`是一个全局互斥量,由主线程创建并初始化。互斥量的初始状态是未锁定,即`FALSE`。 4. **WaitForSingleObject**:该函数用于等待指定对象的状态改变,例如,当互斥量被锁定时,线程会在此函数上阻塞,直到获得互斥量的所有权。在`Fun1Proc`和`Fun2Proc`中,线程使用这个函数等待`m_hMutex`。 5. **资源共享**:`tickets`变量是两个线程共享的资源,表示票的数量。在没有互斥量保护的情况下,多线程可能会导致数据不一致。通过使用互斥量,可以确保在同一时刻只有一个线程能够访问和修改`tickets`。 6. **线程安全操作**:在`Fun1Proc`和`Fun2Proc`中,线程首先获取互斥量所有权,然后检查`tickets`是否大于0。如果大于0,线程会模拟售票操作并减1,然后释放互斥量。`ReleaseMutex`函数用于释放当前线程对互斥量的持有,允许其他线程继续执行。 7. **线程退出条件**:当`tickets`降为0时,线程会停止售票,跳出循环,线程执行结束。 这个例子展示了如何在C++中使用互斥量实现线程间的同步,防止数据竞争,确保共享资源的安全访问。同时,通过设置不同的睡眠时间,可以看到线程调度的影响,使得售票操作有顺序感,更好地模拟了实际的并发情况。