博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows多线程同步机制---信号量
阅读量:3987 次
发布时间:2019-05-24

本文共 1479 字,大约阅读时间需要 4 分钟。

 1 信号量

    通知的作用,和事件类似.但是与事件不同.事件只维护一个值0或者1.
    信号量维护一个变量,0时无信号,大于0有信号.
    

  2 信号量的使用

    2.1 创建信号量

   
HANDLE CreateSemaphore(
       LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
                       //安全属性
       LONG lInitialCount,//初始信号量
       LONG lMaximumCount,//最大信号量
       LPCTSTR lpName //命名
   );
      返回创建好的信号量句柄.

    2.2 等候信号量

      WaitForSingleObject
      WaitForMultipleObjects

    2.3 释放信号

      BOOL ReleaseSemaphore(
       HANDLE hSemaphore, //信号量句柄
       LONG lReleaseCount,//释放信号的数量
       LPLONG lpPreviousCount //释放前的数量
      );

    2.4 关闭信号量

      CloseHandle

    2.5 打开信号量

      OpenSemaphore

// Semaphore.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "conio.h"#include "windows.h"HANDLE g_hSemaphore = NULL;DWORD WINAPI ThreadSend( LPVOID pParam ){	while( 1 )	{		CHAR ch = getch( );		switch( ch )		{		case '1':			//释放信号			ReleaseSemaphore( g_hSemaphore,				1, NULL );			break;		case '5':			ReleaseSemaphore( g_hSemaphore,				5, NULL );			break;		}	}	return 0;}DWORD WINAPI ThreadRecv( LPVOID pParam ){	while( 1 )	{	//等候信号量的信号		WaitForSingleObject( 			g_hSemaphore, INFINITE );		printf( "Hello Semaphore\n" );		Sleep( 100 );	}	return 0;}void Create( ){	DWORD  nThreadID  = 0;	HANDLE hThread[2] = { NULL };	hThread[0] = CreateThread( NULL, 0,		ThreadSend, NULL, 0, &nThreadID );	hThread[1] = CreateThread( NULL, 0,		ThreadRecv, NULL, 0, &nThreadID );	WaitForMultipleObjects( 2, hThread,		TRUE, INFINITE );}int main(int argc, char* argv[]){	//创建信号量	g_hSemaphore = CreateSemaphore( 		NULL, 5, 10, NULL );	Create();	//关闭信号量	CloseHandle( g_hSemaphore );	return 0;}

转载地址:http://lwxui.baihongyu.com/

你可能感兴趣的文章
关于静态块、静态属性、构造块、构造方法的执行顺序
查看>>
final 的作用
查看>>
在Idea中使用Eclipse编译器
查看>>
idea讲web项目部署到tomcat,热部署
查看>>
centos 防火墙关闭/开启
查看>>
HASHMAP 深入解析
查看>>
HASHMAP原理解析,不错的文章
查看>>
优化IDEA启动速度,快了好多。后面有什么优化点,会继续往里面添加
查看>>
CSRF攻击与防御(写得非常好)
查看>>
SpringBoot 在CentOS7部署,注册为服务,开机启动
查看>>
Spring boot 学习
查看>>
JMeter 保持sessionId
查看>>
IDEA Properties中文unicode转码问题
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>
Idea导入的工程看不到src等代码
查看>>
获取指定接口的所有实现类或获取指定类的所有继承类
查看>>
技术栈
查看>>
Jenkins中shell-script执行报错sh: line 2: npm: command not found
查看>>
8.X版本的node打包时,gulp命令报错 require.extensions.hasownproperty
查看>>