使用信号量机制同步线程
来源:互联网 发布:淘宝炉石 编辑:程序博客网 时间:2024/04/29 06:40
信号量的使用:
信号量的创建:CreateSemaphore(属性指针,初始值,最大值,名称)。
信号量的释放:ReleaseSemaphore(句柄,增加值,原先值指针)。
打开一个信号量:OpenSemaphore(期望的访问权限, 是否继承,名称);
#include <iostream>#include <Windows.h>using namespace std;#define THREAD_INSTANCE_NUMBER 3DWORD foo(void* pData){int threadNumberTemp = *(int *)pData;HANDLE hSemaphore;cout << "foo: " << threadNumberTemp << " is running" << endl;if ((hSemaphore = OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, (LPCWSTR)"Semaphore.Test")) == NULL){cout << "open semaphore error." << endl;}cout << "foo: " << threadNumberTemp << " gets the semaphore" << endl;ReleaseSemaphore(hSemaphore, 1, NULL);CloseHandle(hSemaphore);return 0;}int main(){DWORD ThreadID[THREAD_INSTANCE_NUMBER];HANDLE hThread[THREAD_INSTANCE_NUMBER];HANDLE hSemaphore;if ((hSemaphore = CreateSemaphore(NULL, 1, 1, (LPCWSTR)"Semaphore.Test")) == NULL){cout << "create semaphore error" << endl;return 0;}for (int i = 0; i < THREAD_INSTANCE_NUMBER; i++){hThread[i] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)foo,(void*)&hThread[i],0,&(ThreadID[i]));if (hThread[i] == NULL){cout << "create error: " << ThreadID[i] << endl; }else{cout << "create thread: " << ThreadID[i] << endl;}}WaitForMultipleObjects(THREAD_INSTANCE_NUMBER, hThread, TRUE, INFINITE);CloseHandle(hSemaphore);return 0;}
0 0
- 使用信号量机制同步线程
- 线程同步--使用信号量
- 线程同步机制之信号量
- 线程同步信号量的使用
- 线程同步机制(1)---无名信号量
- Linux线程同步机制四--信号量sem
- Linux线程编程 - 线程同步机制之信号量
- 使用信号量进行线程间同步
- 使用信号量实现线程间同步
- 使用信号量 进行windows线程同步 (Semaphore)
- 使用信号量控制Linux线程同步
- 使用信号量控制Linux线程同步
- C++使用信号量对象实现线程同步
- 线程同步:信号量Semaphore的使用
- Linux使用信号量同步请求、应答线程
- 使用信号量解决两个线程同步问题
- 线程同步机制有临界区、互斥、信号量优缺点
- 线程同步机制:互斥量、信号量、读写锁、条件变量
- 深搜迷宫模板
- 循环buffer的一种实现
- Vijos P1913 螺旋矩阵(模拟)
- 大数据IMF传奇行动绝密课程第47课:Spark性能优化第三季
- heap消耗(-xms设置大小决定),GC频繁,GC overheadlimit exceeded解决办法
- 使用信号量机制同步线程
- NOIP2015信息传递 强连通分量 tarjan
- 51nod 1264 线段相交(叉积)
- 浏览器同源策略与跨域请求的实现方法
- 文章标题
- 迪杰斯特拉模板
- 按优先级可抢占系统的利用率计算
- Java中接口里定义的成员变量
- 做APP,从头到尾产品经理需要做什么?—项目执行中