当前位置: 首页 > news >正文

【学习笔记】条件变量+互斥锁解决问题

【学习笔记】条件变量+互斥锁解决问题

一、问题

存在一个线程,这个线程执行一次就会休眠一分钟,但是某个动作触发的时候需要这个线程执行一次。

二、解决问题

一个线程在while(1)中每次执行

	pthread_cond_t auth_cond;    //条件变量 pthread_mutex_t auth_mutex;  //时间互斥锁 pthread_cond_init(&gpHseriesBox->DeviceManage->auth_cond, NULL);pthread_mutex_init(&gpHseriesBox->DeviceManage->auth_mutex, NULL);void *pthread_func(void * arg)
{while(true){struct timespec timeout; clock_gettime(CLOCK_REALTIME, &timeout);timeout.tv_sec += 60;  // 计算超时时间(当前时间 + 60秒)休眠60秒pthread_mutex_lock(&stu->auth_mutex);// 执行业务代码// 等待触发信号或超时(可以被打断的休眠60秒)int result = pthread_cond_timedwait(&stu->auth_cond, &stu->auth_mutex, &timeout);if (result == ETIMEDOUT)  //超时60s{// 自己等待超时60Spthread_mutex_unlock(&stu->auth_mutex);continue;}// 被条件变量触发pthread_mutex_unlock(&stu->auth_mutex);DEBUG_NOTICE("[auth] pthread_authorization_func Start by cond");}
}     //只需要在调用的地方调用一次这个接口即可,记得加锁:        pthread_cond_signal(&auth_cond);  // 立即唤醒一次睡眠中的线程

你可以理解为下面的代码就是sleep(60),只是这个1分钟是可以随时被打断的。

        // 等待触发信号或超时(可以被打断的休眠60秒)int result = pthread_cond_timedwait(&stu->auth_cond, &stu->auth_mutex, &timeout);if (result == ETIMEDOUT)  //超时60s{// 自己等待超时60Spthread_mutex_unlock(&stu->auth_mutex);continue;}// 被条件变量触发pthread_mutex_unlock(&stu->auth_mutex);DEBUG_NOTICE("[auth] pthread_authorization_func Start by cond");

文章转载自:
http://checker.kjawz.cn
http://bebop.kjawz.cn
http://butterfingers.kjawz.cn
http://alimentative.kjawz.cn
http://abbreviatory.kjawz.cn
http://boxwood.kjawz.cn
http://antidrug.kjawz.cn
http://anciently.kjawz.cn
http://adenosis.kjawz.cn
http://aged.kjawz.cn
http://anthropophagite.kjawz.cn
http://aura.kjawz.cn
http://amusing.kjawz.cn
http://aborally.kjawz.cn
http://anecdote.kjawz.cn
http://changer.kjawz.cn
http://armor.kjawz.cn
http://alive.kjawz.cn
http://chordal.kjawz.cn
http://cabezon.kjawz.cn
http://allegheny.kjawz.cn
http://arpa.kjawz.cn
http://begum.kjawz.cn
http://actionist.kjawz.cn
http://caribbean.kjawz.cn
http://abruptness.kjawz.cn
http://bowshock.kjawz.cn
http://afterglow.kjawz.cn
http://ancona.kjawz.cn
http://blithesome.kjawz.cn
http://www.dtcms.com/a/280560.html

相关文章:

  • 快速排序:原理、示例与 C 语言实现详解
  • 区块链的三种共识机制——PoW、PoS和DPoS原理
  • [面试] js 数组面试题
  • LangChain智能体开发实战:从零构建企业级AI助手
  • Ubuntu18.04 系统重装记录
  • Flutter 入门指南:从基础到实战
  • 22.计算指定范围内数字的幂次和
  • 【深度学习优化算法】06:动量法
  • Apriori 原理:快速筛选频繁出现的症状组合
  • B/S架构系统角色与对应协议详解
  • 《C++模板高阶机制解析:非类型参数、特化设计与分离编译实践》
  • CG--类比推理
  • IPsec:网络层的加密盾牌与HTTPS的差异解析
  • 尚庭公寓-----day1----逻辑删除功能
  • URL 转静态 HTML 文件 API 数据接口
  • GaussDB 数据库字符编码与兼容模式
  • 华大单片机HC32L110烧录程序方法
  • QT链接ACCESS数据库
  • Oracle 索引实战教程
  • Rust基础[part4]_基本类型,所有权
  • 编译原理第一到三章(知识点学习/期末复习/笔试/面试)
  • 正则表达式使用示例
  • 【canal+mysql+example+数据验证测试】
  • 从 0 到 1 掌握 自研企业级分布式 ID 发号器
  • C 语言(二)
  • GaussDB 数据库架构师修炼(三) 集群管理概览
  • Kafka 4.0 技术深度解析
  • 现代CSS实战:用变量与嵌套重构可维护的前端样式
  • Go 错误处理全解析:从 error 到 panic
  • Go 包管理工具详解:安装与使用指南