多线程信号处理,多线程信号量的定义和作用
信号量多线程主要用于同步线程或者限制线程运行的数量。
所谓同步,当进程1在线程1中运行,进程2在线程2中运行时,进程1结束后进程2才能执行。你会怎么做?你需要做的就是给出一个信号,过程1结束了。
在信号到来之前,让线程2在某个位置等待。这种用法有点类似于互斥,在某种意义上也是一种同步,但互斥更倾向于保护公共资源。当信号量大于0时,表示有信号。不需要等待,但不仅仅是1。
以下示例设置了三个线程,当设置了最大值时,只有两个进程运行。
#包含Windows.h
#包括iostream
使用命名空间std
//创建信号量
处理hSemaphore
//有参数
DWORD WINAPI myth read 2(LPVOID lpparameter)
{
while (1)
{
WaitForSingleObject(hSemaphore,INFINITE);
cout mythread 1 running:“”thread 2”endl;
睡眠(2000);
ReleaseSemaphore(hSemaphore,1,NULL);//释放信号量
}
}
//没有参数
DWORD WINAPI myth read 1(LPVOID lpparameter)
{
while (1)
{
//信号量减1。如果等于0,你就去睡觉,大于0后再递减。
WaitForSingleObject(hSemaphore,INFINITE);
cout mythread 2 running thread 1 endl;
睡眠(2000);
//信号量加1
ReleaseSemaphore(hSemaphore,1,NULL);//释放信号量
}
}
//没有参数
DWORD WINAPI myth read 3(LPVOID lpparameter)
{
while (1)
{
//信号量减1。如果等于0,你就去睡觉,大于0后再递减。
WaitForSingleObject(hSemaphore,INFINITE);
cout mythread 2 running thread 3 endl;
睡眠(2000);
//释放信号量,信号量加1。
ReleaseSemaphore(hSemaphore,2,NULL);
}
}
int main()
{
//创建一个信号量,初始值为2,最大值为3。
hSemaphore=CreateSemaphore(NULL,2,3,NULL);
//第三个参数是线程函数的地址,第四个参数是传递给线程的参数指针。
HANDLE hThread=CreateThread(NULL,0,MyThread1,NULL,0,NULL);
//释放句柄
close handle(hThread);
HANDLE hthread 1=CreateThread(NULL,0,MyThread2,NULL,0,NULL);
close handle(hThread);
HANDLE hthread 3=CreateThread(NULL,0,MyThread3,NULL,0,NULL);
//释放句柄
close handle(hthread 3);
while(1);
返回0;
}结果,你可以看到三个线程交替运行两个
原创作品来自勿忘你的倡议心,的博主,
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。