windows系统调用 semaphore信号量
时间: 2023-10-01 18:10:29 浏览: 141
信号量(Semaphore)
在Windows系统中,信号量(Semaphore)是一种同步对象,用于在多个线程之间协调共享资源的访问。Windows提供了一组API函数来创建、操作和销毁信号量。
以下是一些与信号量相关的API函数:
1. CreateSemaphore:创建一个信号量对象。
2. WaitForSingleObject:等待一个信号量对象。
3. ReleaseSemaphore:释放一个信号量对象。
4. OpenSemaphore:打开一个已经存在的信号量对象。
5. CloseHandle:关闭一个信号量对象的句柄。
下面是一个使用信号量的示例:
```C++
#include <windows.h>
#include <iostream>
using namespace std;
HANDLE hSemaphore; // 信号量句柄
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
// 等待信号量
WaitForSingleObject(hSemaphore, INFINITE);
// 访问共享资源
cout << "Thread " << GetCurrentThreadId() << " access shared resource." << endl;
// 释放信号量
ReleaseSemaphore(hSemaphore, 1, NULL);
return 0;
}
int main()
{
// 创建信号量
hSemaphore = CreateSemaphore(NULL, 1, 1, NULL);
// 创建线程
HANDLE hThread1 = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
HANDLE hThread2 = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
// 等待线程结束
WaitForSingleObject(hThread1, INFINITE);
WaitForSingleObject(hThread2, INFINITE);
// 关闭信号量句柄
CloseHandle(hSemaphore);
return 0;
}
```
在这个示例中,我们创建了一个信号量句柄,并创建了两个线程。线程会等待信号量,然后访问共享资源。访问完成后,线程会释放信号量。由于信号量的初始计数为1,所以只有一个线程能够访问共享资源。
阅读全文