用DEV自主实现 两个子线程之间的互斥。在主线程中使用系统调用函CreateThread()创建两个子线程,并使两个子线程互斥地使用全局变量count。
时间: 2024-10-17 22:07:55 浏览: 29
MulThread.rar_多线程 进度条_子线程界面_进度条 多线程
在DEV环境中,要让两个子线程之间互斥地访问全局变量`count`,可以使用线程同步机制,比如Windows API提供的`Mutex`(互斥量)。以下是简单的步骤:
1. 首先,需要包含必要的头文件:
```cpp
#include <windows.h>
#include <iostream>
```
2. 定义一个全局变量`count`和一个互斥量`mutex`:
```cpp
volatile int count = 0;
CRITICAL_SECTION mutex; // 用于互斥访问
```
注意:`volatile`关键字防止编译器优化掉对全局变量的更新。
3. 在主线程中创建`mutex`并初始化:
```cpp
void InitializeCriticalSection(CRITICAL_SECTION* cs)
{
InitializeCriticalSection(cs);
}
int main()
{
InitializeCriticalSection(&mutex); // 初始化互斥量
// 创建子线程函数
HANDLE thread1 = CreateThread(NULL, 0, &ThreadFunction1, NULL, 0, NULL);
HANDLE thread2 = CreateThread(NULL, 0, &ThreadFunction2, NULL, 0, NULL);
// 等待所有子线程结束
WaitForSingleObject(thread1, INFINITE);
CloseHandle(thread1);
WaitForSingleObject(thread2, INFINITE);
CloseHandle(thread2);
DeleteCriticalSection(&mutex); // 销毁互斥量,释放资源
return 0;
}
```
4. 子线程函数中获取和释放互斥量:
```cpp
DWORD WINAPI ThreadFunction1(LPVOID lpParam)
{
EnterCriticalSection(&mutex); // 获取互斥量
try {
// 更新count并在适当的时候解锁
count++;
Sleep(1000); // 模拟耗时操作
} finally {
LeaveCriticalSection(&mutex); // 释放互斥量
}
return 0;
}
DWORD WINAPI ThreadFunction2(LPVOID lpParam)
{
EnterCriticalSection(&mutex); // 获取互斥量
try {
// 同样更新count并等待其他线程完成
count++;
Sleep(500); // 模拟耗时操作
} finally {
LeaveCriticalSection(&mutex); // 释放互斥量
}
return 0;
}
```
阅读全文