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

来源:互联网 发布:阿里云服务器配置ipv6 编辑:程序博客网 时间:2024/06/04 00:29
#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

0 0
原创粉丝点击