windows多线程同步机制---信号量
2016-02-17 20:26
260 查看
1 信号量
通知的作用,和事件类似.但是与事件不同.事件只维护一个值0或者1.信号量维护一个变量,0时无信号,大于0有信号.
2 信号量的使用
2.1 创建信号量
HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
//安全属性
LONG lInitialCount,//初始信号量
LONG lMaximumCount,//最大信号量
LPCTSTR lpName //命名
);
返回创建好的信号量句柄.
2.2 等候信号量
WaitForSingleObjectWaitForMultipleObjects
2.3 释放信号
BOOL ReleaseSemaphore(HANDLE hSemaphore, //信号量句柄
LONG lReleaseCount,//释放信号的数量
LPLONG lpPreviousCount //释放前的数量
);
2.4 关闭信号量
CloseHandle2.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;
}
相关文章推荐
- linux多线程编程详解教程(线程通过信号量实现通信代码)
- PHP信号量基本用法实例详解
- Python多线程同步Lock、RLock、Semaphore、Event实例
- JAVA 多线程之信号量(Semaphore)实例详解
- 五种Java多线程同步的方法
- 基于Java回顾之多线程同步的使用详解
- Java 多线程同步 锁机制与synchronized深入解析
- Linux设备驱动并发控制详解(自旋锁,信号量)
- 信号量
- 信号量、互斥锁,读写锁和条件变量的区别
- iOS开发多线程同步
- 互斥锁与条件变量的配合!
- 信号量 互斥锁 条件变量的区别
- 关于哲学家就餐问题 源代码(linux)
- 《Win32多线程程序设计》(3)---同步控制
- 《Win32多线程程序设计》(4)--- 互斥器(Mutexes)
- 《Win32多线程程序设计》(5)---信号量(Semaphores)
- 《Win32多线程程序设计》(6)---事件(Event Objects)
- 《Win32多线程程序设计》(8)---Interlocked Variables
- 《Win32多线程程序设计》(9)---同步机制摘要