首页 > 其他 > 详细

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

时间:2015-03-31 14:41:12      阅读:184      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!