CreateSemaphore使用demo
时间: 2024-09-06 18:05:30 浏览: 82
多线程同步Demo
`CreateSemaphore`是Windows API中的一个函数,用于创建一个信号量(Semaphore),这是一个同步工具,允许控制对共享资源的访问。在Windows编程中,信号量通常用于控制并发进程的数量或者作为计数器。
以下是一个简单的`CreateSemaphore`的使用示例(使用C++):
```cpp
#include <windows.h>
#include <iostream>
// 创建信号量
HANDLE CreateSemaphoreExample()
{
HANDLE semaphore = NULL;
SECURITY_ATTRIBUTES saAttr; // 用于设置权限的安全属性
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = FALSE; // 信号量不会被子进程继承
saAttr.lpSecurityDescriptor = NULL;
// 初始化信号量值为0,最多可以有5个进程等待
if (CreateSemaphore(&saAttr, 0, 5, "MySemaphoreName", nullptr)) {
std::cout << "Semaphore created successfully.\n";
semaphore = GetLastError(); // 返回新创建的句柄
} else {
std::cerr << "Failed to create semaphore: " << GetLastError() << ".\n";
}
return semaphore;
}
int main()
{
HANDLE sem = CreateSemaphoreExample();
// ... 后续你可以通过sem来管理访问,例如减小信号量值以释放一个单位,增大信号量值允许更多的进程进入...
CloseHandle(sem); // 使用完毕后关闭信号量
return 0;
}
```
在这个例子中,我们创建了一个名为"MySemaphoreName"的信号量,初始值为0,最多可以有5个进程同时访问。当需要更多进程加入时,调用`ReleaseSemaphore`来增加信号量值;当一个进程完成任务并退出,调用`ReleaseSemaphore`一次或多次来减少信号量值。
阅读全文