news 2026/2/18 14:48:13

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
网络编程封装mutex、cond、semaphore学习笔记

1.代码

#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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/16 6:24:20

Proteus汉化操作指南:Windows平台界面替换步骤

手把手教你汉化Proteus&#xff1a;从原理到实战的完整指南 你是不是也曾在打开Proteus时&#xff0c;面对满屏英文菜单感到头大&#xff1f;“Place Component”、“Run Simulation”、“Netlist Generate”……每一个术语都像是一道无形的门槛&#xff0c;尤其对刚入门电子设…

作者头像 李华
网站建设 2026/2/14 20:23:36

快速理解去耦电容在电路启动阶段的作用

去耦电容&#xff1a;别小看这颗“小电容”&#xff0c;它决定了你的板子能不能第一次上电就跑起来你有没有遇到过这样的场景&#xff1f;新画的PCB打样回来&#xff0c;信心满满接上电源——结果MCU没反应。再试一次&#xff0c;偶尔能启动&#xff0c;但马上复位。示波器一抓…

作者头像 李华
网站建设 2026/2/16 2:40:34

一套底座支撑多场景:高德地图基于 Paimon + StarRocks 轨迹服务实践

作者&#xff1a;赵宇(司忱)/数据开发工程师导读&#xff1a; 本文整理自高德数据开发工程师、赵宇在 Streaming Lakehouse Meetup上的分享。聚焦高德地图轨迹服务在实时湖仓方向的落地实践。 面对轨迹数据“高实时、高并发、长周期存储”的典型特征&#xff0c;高德团队以访问…

作者头像 李华
网站建设 2026/2/17 1:46:09

vivado安装教程(Windows):多版本共存配置方法

Vivado多版本共存实战指南&#xff1a;Windows下的高效开发环境搭建 在FPGA开发中&#xff0c;Vivado是Xilinx&#xff08;现AMD&#xff09;提供的核心设计工具链&#xff0c;覆盖从RTL输入、综合实现到硬件调试的全流程。随着项目复杂度提升和器件迭代加速&#xff0c;工程师…

作者头像 李华
网站建设 2026/2/16 11:20:25

springboot牙科诊所管理系统设计与实现

摘 要 随着信息时代的来临&#xff0c;过去的传统管理方式缺点逐渐暴露&#xff0c;对过去的传统管理方式的缺点进行分析&#xff0c;采取计算机方式构建牙科诊所管理系统。本文通过课题背景、课题目的及意义相关技术&#xff0c;提出了一种预约挂号、诊治信息、留言反馈等于一…

作者头像 李华
网站建设 2026/2/16 12:49:28

springboot医院血库管理系统的设计与实现

摘 要 医院血库&#xff0c;其工作流程繁杂、多样、管理复杂与设备维护繁琐。而计算机已完全能够胜任医院血库工作&#xff0c;而且更加准确、方便、快捷、高效、清晰、透明&#xff0c;它完全可以克服以上所述的不足之处。这将给查询信息和管理带来很大的方便&#xff0c;从而…

作者头像 李华