#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