码迷,mamicode.com
首页 > 其他好文 > 详细

文件传输项目模块2互斥与同步

时间:2015-03-31 14:42:49      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:   信号量   互斥   同步   

#ifndef LOCKER_H
#define LOCKER_H

#include<exception>
#include<pthread.h>
#include<semaphore.h>//信号量头文件
#include<iostream>
using namespace std;

//封装信号量的类
class sem
{
public:
	//创建信号量
	sem()
	{
		if( sem_init(&m_sem, 0, 0) != 0 )//第二个参数为0表示该信号量在线程间共享,第三个参数信号量初始值为0
		{
			throw std::exception();
		}
	}

	//销毁信号量
	~sem()
	{
		sem_destroy(&m_sem);
	}

	//以下两者配合以达到线程同步的效果
	//等待信号量
	bool wait()//->p操作
	{
		return sem_wait(&m_sem) == 0; //如果信号量<=0 则sem_wait会阻塞 直到信号量值>=1 然后再进行该操作
	}

	//增加信号量
	bool post()//->v操作
	{
		return sem_post(&m_sem) == 0; //对信号量进行加1操作
	}
private:
	sem_t m_sem;
};

//封装互斥锁的类
class locker
{
public:
	//创建并初始化互斥锁
	locker()
	{
		if( pthread_mutex_init(&m_mutex, NULL) != 0) //NULL表示互斥锁属性为默认
		{
			throw std::execption();
		}
	}

	//销毁互斥锁
	~locker
	{
		pthread_mutex_destroy(&m_mutex);
	}

	//获取互斥锁
	bool lock()
	{
		return pthread_mutex_lock(&m_mutex) == 0; //获得锁, 否则会阻塞
	}

	//释放互斥锁
	bool unlock()
	{
		reutnr pthread_mutex_unlock(&m_mutex) == 0;
	}

private:
	pthread_mutex_t m_mutex;
};

#endif

文件传输项目模块2互斥与同步

标签:   信号量   互斥   同步   

原文地址:http://blog.csdn.net/huai1693838234/article/details/44779159

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!