使用信号量机制同步线程

原创 2016年08月30日 19:51:35

信号量的使用:

信号量的创建:CreateSemaphore(属性指针,初始值,最大值,名称)。

信号量的释放:ReleaseSemaphore(句柄,增加值,原先值指针)。

打开一个信号量:OpenSemaphore(期望的访问权限, 是否继承,名称);


#include <iostream>
#include <Windows.h>

using namespace std;

#define THREAD_INSTANCE_NUMBER 3

DWORD 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;
}








版权声明:本文为博主原创文章,未经博主允许不得转载。

Linux进程同步之POSIX信号量

POSIX信号量是属于POSIX标准系统接口定义的实时扩展部分。在SUS(Single UNIX Specification)单一规范中,定义的XSI IPC中也同样定义了人们通常称为System V...
  • anonymalias
  • anonymalias
  • 2013年07月01日 22:14
  • 10517

Linux下线程同步机制

Linux下线程同步机制
  • hongkangwl
  • hongkangwl
  • 2014年04月11日 19:43
  • 1265

利用信号量机制解决进程同步和互斥问题

利用信号量机制解决进程同步和互斥问题   在讨论如何用信号量机制解决这个问题之前,我们应该先了解进程同步和互斥间的一些概念。 首先是进程间的两种关系:同步和互斥。所谓同步就是把异步环境下的一组并...
  • sinat_14840443
  • sinat_14840443
  • 2014年10月27日 15:35
  • 1425

C例子:信号量同步线程

  • 2016年01月27日 22:58
  • 3KB
  • 下载

Linux多线程——使用信号量同步线程

信号量、同步这些名词在进程间通信时就已经说过,在这里它们的意思是相同的,只不过是同步的对象不同而已。但是下面介绍的信号量的接口是用于线程的信号量,注意不要跟用于进程间通信的信号量混淆,关于用于进程间通...
  • ly0303521
  • ly0303521
  • 2015年09月08日 21:45
  • 380

基于visual c++之windows核心编程代码分析(12)使用信号量同步线程

我们编写多线程应用程序的时候,经常需要进行线程同步协作,我们来实践一下用信号量同步线程。请见代码实现与注释分析, [cpp] view plain copy ...
  • flyingleo1981
  • flyingleo1981
  • 2016年12月08日 21:54
  • 246

基于visual c++之windows核心编程代码分析(12)使用信号量同步线程

我们编写多线程应用程序的时候,经常需要进行线程同步协作,我们来实践一下用信号量同步线程。请见代码实现与注释分析,/* 头文件 */ #include #include /* 常量定义 */ #de...
  • yincheng01
  • yincheng01
  • 2011年12月17日 11:49
  • 2220

Linux多线程——使用信号量同步线程

信号量、同步这些名词在进程间通信时就已经说过,在这里它们的意思是相同的,只不过是同步的对象不同而已。但是下面介绍的信号量的接口是用于线程的信号量,注意不要跟用于进程间通信的信号量混淆,关于用于进程间通...
  • lien0906
  • lien0906
  • 2016年03月10日 15:34
  • 320

MFC(2)MFC中使用信号量(semaphore)做线程同步——用户启动子线程打开串口

新建基于对话框的MFC工程,OpenDevice这个类由DLG类调用。 OpenDevice.h #pragma once class OpenDevice { public: OpenDev...
  • luoyouren
  • luoyouren
  • 2015年04月05日 15:17
  • 1122

Linux多线程——使用信号量同步线程

这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信——使用信号。下面...
  • sunxiaopengsun
  • sunxiaopengsun
  • 2016年12月30日 16:16
  • 143
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用信号量机制同步线程
举报原因:
原因补充:

(最多只允许输入30个字)