网络编程封装mutex、cond、semaphore学习笔记

1.代码

cpp 复制代码
#ifndef LOCKER_H
#define LOCKER_H
#include<exception>
#include<pthread.h>
#include<semaphore.h>


class locker{
public:
    locker(){
        if(pthread_mutex_init(&mutex,NULL)!=0){
            throw std::exception();
        }
    }
    ~locker(){
        pthread_mutex_destroy(&mutex);
    }
    bool lock(){
        return pthread_mutex_lock(&mutex)==0;
    }
    bool unlock(){
        return pthread_mutex_unlock(&mutex)==0;
    }
    pthread_mutex_t *get(){
        return &mutex;
    }
private:
    pthread_mutex_t mutex;
};

class cond{
public:
    cond(){
        if(pthread_cond_init(&m_cond,NULL)!=0){
            throw std::exception();
        }
    }
    ~cond(){
        pthread_cond_destroy(&m_cond);
    }
    bool wait(pthread_mutex_t *mutex){
       // int ret=0;
        //ret=pthread_cond_wait(&m_cond,mutex);
        //return ret==0;
        return pthread_cond_wait(&m_cond,mutex)==0;
    }
    bool timewait(pthread_mutex_t *mutex,timespec t){
        //int ret=0;
        //ret=pthread_cond_timedwait(&m_cond,mutex,&t);
        //return ret==0;
        return pthread_cond_timedwait(&m_cond,mutex,&t)==0;
    }
    bool signal(){
        return pthread_cond_signal(&m_cond)==0;
    }
    bool broadcast(){
        return pthread_cond_broadcast(&m_cond)==0;
    }
private:
    pthread_cond_t m_cond;
};

class sem{
    public:
    sem(){
        if(sem_init(&m_sem,0,0)!=0){
            throw std::exception();
        }
    }
    sem(int num){
        if(sem_init(&m_sem,0,num)!=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;
};

#endif

2.知识点

1.使用构造和析构来封装对锁的初始化和销毁的处理。

2.对于cond

pthread_cond_wait和pthread_cond_signal

参数是要绑定的锁的指针。

3.对于sem

有sem_wait和sem_post

4.对于成功的判别主要是通过==0

相关推荐
逑之10 小时前
C语言笔记3:分支与循环
c语言·开发语言·笔记
逑之10 小时前
C语言笔记6:调试
c语言·笔记
做cv的小昊10 小时前
【TJU】信息检索与分析课程笔记和练习(10)专利文献和中文专利检索
经验分享·笔记·学习·全文检索·学习方法·信息检索
天天睡大觉10 小时前
Python学习7
windows·python·学习
saoys10 小时前
Opencv 学习笔记:滑块(Trackbar)实现动态调整二值化阈值
笔记·opencv·学习
swan41610 小时前
SCAU期末笔记 - 计算机网络复习要点整理
服务器·笔记·计算机网络
i7i8i9com10 小时前
React 19+Vite+TS学习基础-1
前端·学习·react.js
春风有信11 小时前
【学术写作】LaTeX基础:从概念理解到基础应用
经验分享·笔记·学习
Larry_Yanan11 小时前
Qt安卓开发(一)Qt6.10环境配置
android·开发语言·c++·qt·学习·ui