#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原文:http://blog.csdn.net/huai1693838234/article/details/44779159