linux 线程同步机制包装类

将3中线程同步机制分别封装成3个类,实现在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_port( &_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 );
    }
    
    private:
      pthread_mutex_t m_mutex;
      pthread_cond_t m_cond;
};
#endif



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值