网站开发专业优势,重庆公司建设网站,网站里的聊天怎么做的,公司网站做百度广告如何报税如果大家不太了解信号量、互斥锁和条件变量的#xff0c;可以先看一下下面三篇文章。
linux多线程之POSIX信号量-CSDN博客linux多线程之互斥锁-CSDN博客linux多线程之条件变量-CSDN博客
locker.h
#ifndef LOCKER_H
#define LOCKER_H#include exception
#include 可以先看一下下面三篇文章。
linux多线程之POSIX信号量-CSDN博客linux多线程之互斥锁-CSDN博客linux多线程之条件变量-CSDN博客
locker.h
#ifndef LOCKER_H
#define LOCKER_H#include exception
#include pthread.h
#include semaphore.h// 封装信号量
class sem
{
public:sem(){if( sem_init( m_sem, 0, 0 ) ! 0 ){throw std::exception();}}~sem(){sem_destroy( m_sem );}bool wait(){return sem_wait( m_sem ) 0;}bool post(){return sem_post( m_sem ) 0;}private:sem_t m_sem;
};// 封装后斥锁
class locker
{
public:locker(){if( pthread_mutex_init( m_mutex, NULL ) ! 0 ){throw std::exception();}}~locker(){pthread_mutex_destroy( m_mutex );}bool lock(){return pthread_mutex_lock( m_mutex ) 0;}bool unlock(){return pthread_mutex_unlock( m_mutex ) 0;}private:pthread_mutex_t m_mutex;
};// 封装条件变量
class cond
{
public:cond(){if( pthread_mutex_init( m_mutex, NULL ) ! 0 ){throw std::exception();}if ( pthread_cond_init( m_cond, NULL ) ! 0 ){pthread_mutex_destroy( m_mutex );throw std::exception();}}~cond(){pthread_mutex_destroy( m_mutex );pthread_cond_destroy( m_cond );}bool wait(){int ret 0;pthread_mutex_lock( m_mutex );ret pthread_cond_wait( m_cond, m_mutex );pthread_mutex_unlock( m_mutex );return ret 0;}bool signal(){return pthread_cond_signal( m_cond ) 0;}private:pthread_mutex_t m_mutex;pthread_cond_t m_cond;
};#endif