用devc完成两个子线程的互斥。在主系统中使用系统调用函数CreateThread()创建两个子线程,并使两个子线程互斥地使用全局变量count
时间: 2024-10-16 15:21:33 浏览: 38
在Dev-C++环境中,为了实现两个子线程之间的互斥访问全局变量`count`,你可以利用Windows API提供的`CreateMutex()`函数来创建一个互斥量(Mutex),然后在每个子线程中使用`WaitForSingleObject()`来获取互斥锁,确保只有一个线程可以同时更新`count`。以下是基本步骤:
1. **包含头文件**:
```cpp
#include <windows.h> // 包含Windows API中的线程和互斥量相关函数
```
2. **定义全局变量和互斥量**:
```cpp
HANDLE mutex; // 创建一个互斥量
int count = 0; // 全局变量count
```
3. **在主程序中创建互斥量**:
```cpp
// 在主线程启动前创建互斥量
mutex = CreateMutex(NULL, FALSE, NULL); // 初始化时设置初始状态为未锁定
if (mutex == NULL) {
// 错误处理...
}
```
4. **创建子线程函数**:
```cpp
void* thread_func(LPVOID param) {
DWORD thread_id;
Sleep(1000); // 线程暂停一段时间,模拟工作过程
EnterCriticalSection(&mutex); // 获取互斥锁
try {
// 更新count
count++;
printf("Thread %d updated count to %d\n", GetCurrentThreadId(), count);
} finally {
LeaveCriticalSection(&mutex); // 释放互斥锁
}
return NULL;
}
```
5. **在主程序中创建并启动子线程**:
```cpp
void create_threads() {
// 创建线程1
HANDLE thread1 = CreateThread(NULL, 0, thread_func, NULL, 0, &thread_id1);
// 创建线程2
HANDLE thread2 = CreateThread(NULL, 0, thread_func, NULL, 0, &thread_id2);
// 检查线程是否成功创建
if (!thread1 || !thread2) {
// 错误处理...
}
// 等待子线程结束
WaitForSingleObject(thread1, INFINITE);
CloseHandle(thread1);
WaitForSingleObject(thread2, INFINITE);
CloseHandle(thread2);
}
```
6. **完整代码示例**:
```cpp
#include <iostream>
#include <windows.h>
// ...
int main() {
create_threads();
return 0;
}
阅读全文