使用信号量机制同步线程

原创 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 C 线程间通信-信号量机制

1. 线程间通信-互斥锁 互斥锁,适用于共享资源只有一个的情况下。用简单的加锁方法控制对共享资源的原子操作   只有两种状态: 上锁、解锁 可把互斥锁看作某种意义上的全局变量   在同一时刻只能有一个...

【C/C++多线程编程之七】pthread信号量

多线程编程之信号量      Pthread是 POSIX threads 的简称,是POSIX的线程标准。          互斥量用来处理一个共享资源的同步访问问题,当有多个共享资源时,就...

Linux信号量机制

1 需求说明 1.1 基本需求 目标: 本次实验的目标是在Linux环境下实现一个多线程对临界资源的互斥操作,利用信号量实现对临界资源的保护,支持Linux下文件输入输出,提高对Linux环境下...

C例子:信号量同步线程

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

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

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

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

新建基于对话框的MFC工程,OpenDevice这个类由DLG类调用。 OpenDevice.h #pragma once class OpenDevice { public: OpenDev...

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

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

pthread库学习(2): 线程的同步,使用信号量

先看下面这段程序,主线程创建了三个线程,每个线程中均有一个打印语句。 #include #include #include  void *thread_a(void *in) { ...

Linux使用信号量同步请求、应答线程

/************************************************ ** 本实例演示了两个线程,通过信号量进行同步, ** 这种方法简化了软件处理流程,可以用于请求应答...

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

信号量、同步这些名词在进程间通信时就已经说过,在这里它们的意思是相同的,只不过是同步的对象不同而已。但是下面介绍的信号量的接口是用于线程的信号量,注意不要跟用于进程间通信的信号量混淆。相似地,线程同步...
  • ljianhui
  • ljianhui
  • 2013年09月01日 00:09
  • 41893
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用信号量机制同步线程
举报原因:
原因补充:

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