操作系统实验Windows 下线程的互斥的源程序
时间: 2024-10-25 08:11:06 浏览: 16
在Windows操作系统下,实现线程间的互斥通常通过Windows API中的Mutex(互斥量)机制来完成。这是一个简单的示例,展示了如何创建、获取锁和释放锁的基本过程:
```cpp
#include <windows.h>
#include <iostream>
// 创建一个全局的互斥量
HANDLE mutex = NULL;
void MutexExample()
{
// 初始化互斥量
if (mutex == NULL)
{
mutex = CreateMutex(NULL, FALSE, L"SharedResourceMutex");
if (mutex == NULL)
std::cerr << "Failed to create mutex." << std::endl;
}
// 尝试获取锁
DWORD result = WaitForSingleObject(mutex, INFINITE);
if (result != WAIT_OBJECT_0)
{
std::cout << "Failed to acquire lock (error code: " << GetLastError() << ")." << std::endl;
return;
}
std::cout << "Thread acquired the lock." << std::endl;
// 这里放置需要互斥执行的操作
// ...
// 释放锁
ReleaseMutex(mutex);
std::cout << "Thread released the lock." << std::endl;
}
int main()
{
// 在每个想要互斥操作的线程中调用MutexExample函数
// 创建多个线程并启动它们
// 等待所有线程结束
// ...
// 关闭互斥量
CloseHandle(mutex);
return 0;
}
```
在这个例子中,`WaitForSingleObject`函数用于尝试获取锁,如果当前锁未被其他线程持有,则会阻塞等待;当获得锁后,可以执行共享资源操作,然后调用`ReleaseMutex`释放锁,允许其他线程进入。
阅读全文