pthread_cond_wait pthread_cond_broadcast条件变量时要注意

2023-10-27

#include<pthread.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>


pthread_mutex_t mymutex1 = PTHREAD_MUTEX_INITIALIZER;
 pthread_mutex_t mymutex2 = PTHREAD_MUTEX_INITIALIZER;
 pthread_cond_t  mycond  = PTHREAD_COND_INITIALIZER;
 void *mythread1(void *param)
{
pthread_mutex_lock(&mymutex1);
fprintf(stderr,"start wait this is mythread1.\n");
int nerr = pthread_cond_wait(&mycond,&mymutex1);//注意,这个会把mutex重置的
fprintf(stderr,"this is mythread1 %d.\n", nerr);
pthread_mutex_unlock(&mymutex2);//由于thread2重置了mycond变量中的mutex,所以在这地方要释放mymutex2
return NULL;
}
void *mythread2(void *param)
{
pthread_mutex_lock(&mymutex2);
fprintf(stderr,"start wait this is mythread2.\n");
int nerror = pthread_cond_wait(&mycond,&mymutex2);// 先运行thread 1,跑到这语句时,把原来的conn条件变量的mutex重置成mutex2了
fprintf(stderr,"this is mythread2. %d\n", nerror);
pthread_mutex_unlock(&mymutex2);
return NULL;
}
 int main(int argc,char* argv[],char *envp[])
{
int i;
pthread_t tid1,tid2;
pthread_create(&tid1,NULL,mythread1,NULL);
pthread_create(&tid2,NULL,mythread2,NULL);
int ava = getchar();


pthread_mutex_lock(&mymutex1);
pthread_mutex_lock(&mymutex2);
printf("main thread. %d\n", ava);
if(pthread_cond_broadcast(&mycond)){
printf("error\n");
return 1;
}
pthread_mutex_unlock(&mymutex2);
pthread_mutex_unlock(&mymutex1);
pthread_join(tid2, NULL);
printf("this is main thread. %d\n", ava);
return 0;

}

g++ test.cpp -lpthread

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pthread_cond_wait pthread_cond_broadcast条件变量时要注意 的相关文章

  • win7 升级到 win10

    摘要 项目上遇到一个问题 客户提供一个软件在设备上点击运行后 转圈加载下就没有下文了 但是其他的软件又能正常运行 尝试了漏洞修护 系统修护 兼容性运行 管理员运行 32位兼容性进程检测等方式都不行 只能采取将win7升级到win10一试 在
  • vue学习,v-for不渲染

    最近在学习vue 使用axios v for做个搜索天气的小练习 发现只有第一次搜索有数据 改变数组后vue for不渲染 但使用console log可以看到数据确实更新了 使用this forceUpdate 这个不起作用 没办法了 只
  • Python实现桶排序

    Python实现桶排序 一 桶排序简介 桶排序 Bucket sort 是一种通过分桶和合并实现的排序算法 又被称为箱排序 桶排序先将数据分到有限数量的桶里 然后对每一个桶内的数据进行排序 桶内排序可以使用任何一种排序算法 如快速排序 最后
  • JVM系列(九) 垃圾收集器之 Serial / Serial Old

    回收期演变及概览 前面我们讲了很多 垃圾收集的原理和知识点 下面我们针对各种垃圾收集器进行JVM调优 JVM调优其实都是根据对应的垃圾收集器特性而去做调整和优化 不同垃圾收集器的产生总体可以划分为几个阶段 第一阶段 单线程收集时代 Seri
  • 【Unity粒子系统】

    转自 https blog csdn net m0 37679113 article details 75893700 接下来的图片就是Unity2017 1 0f3 编辑器中的粒子系统模块 了解粒子系统 必须先了解每一个属性都代表了什么
  • 程序员为什么被叫做“码农”,我来和大家聊一聊

    在现代社会 计算机技术和互联网行业的迅速发展 使得程序员这个职业在人们心中越来越受到重视 然而 与此同时 也出现了一些对于程序员职业的误解和偏见 今天我就想和小伙伴们一起聊聊这个有趣的话题 程序员被叫做 码农 名字的由来 让大家更加了解程序

随机推荐

  • rt-thead-studio 中实现 MPU6050基于DMP中断读取数据

    rt thead studio 中实现 MPU6050基于DMP中断读取数据 目录 文章目录 rt thead studio 中实现 MPU6050基于DMP中断读取数据 目录 toc 前言 mpl高级特性库问题 一 基于开发板创建闪灯工程
  • DNS服务器概念

    DNS服务概述 DNS Domain Name System 域名系统 在TCP IP 网络中有非常重要的地位 能够提供域名与IP地址的解析服务 DNS 是一个分布式数据库 命名系统采用层次的逻辑结构 如同一棵倒置的树 这个逻辑的树形结构称
  • linux中zip文件解压命令,Linux中zip压缩和unzip解压缩命令使用方法

    Linux继承了Unix以网络为核心的设计思想 是一个性能稳定的多用户网络操作系统 在Linux中 我们可以利用命令进行文件压缩 即zip压缩和unzip解压缩 这篇文章主要介绍了详解Linux中zip压缩和unzip解压缩命令及使用详解
  • 样本方差的快速计算-遍历一遍样本集

    在统计学中 经常需要样本的方差计算 比较麻烦的方式是 1 第一次遍历计算出样本的平均值 2 第二次遍历才能计算出样本的方差 上述方法在样本较少的情况下 非常合适 但如果样本非常大 这种方式就不可取了 而且如果样本是持续增长的 就都不适用了
  • Unity3d学习笔记(一)

    作业内容 1 简答题 解释 游戏对象 GameObjects 和 资源 Assets 的区别与联系 Asset是存储在硬盘上的文件 保存在Unity项目的Assets文件夹内 资源一定可以存在磁盘上 对象是运行期的东西 资源可以被对象使用
  • SLAM学习1 Ubuntu16.04安装ROS-kinetic

    wishchin sudo sh c echo deb http packages ros org ros ubuntu lsb release sc main gt etc apt sources list d ros latest li
  • 2023牛客暑假多校7 CIM 题解

    文章目录 C Beautiful Sequence https ac nowcoder com acm contest 57361 C I We Love Strings https ac nowcoder com acm contest
  • Golang读取配置文件(*.ini)信息

    package main import fmt io ioutil regexp strings func checkErr e error if e nil panic e 函数名 getCfg tag string cfg string
  • Spring之ApplicationContext与BeanFactory详解

    BeanFactory和ApplicationContext Spring通过一个配置文件描述Bean和Bean之间的依赖关系 利用Java反射功能实例化Bean 并建立Bean之间的依赖关系 Spring的IOC容器在完成这些底层工作的基
  • Centos7 配置端口转发

    场景 有两台服务器主机 希望通过A主机的8080端口间接访问B主机的80 端口 开启系统路由模式功能 echo net ipv4 ip forward 1 gt gt etc sysctl conf 运行这个命令会输出上面添加的那一行信息
  • STC89C52单片机数码管介绍以及代码示例

    目录 一 数码管介绍 二 数码管引脚定义 我们首先对单个引脚进行说明 其次 我们对多个引脚管进行说明 最后我们来详细说说如何进行位选还有段选 接着是段选 三 数码管段码表 四 数码管驱动方式 五 代码演示 一 数码管介绍 LED数码管 数码
  • 如何启用服务端远程端口

    客户端操作 windows服务端操作 step1 启用远程桌面 step2 检查端口开放情况 或观察防火墙设置 step3 在 命令提示符 窗口中 输入regedit后按键盘回车键 就可以调出注册表了 step4 在 注册表编辑器 左侧栏中
  • scons 实用说明(一)

    还在为写一个makefile发愁吗 还在为难记的make参数而苦恼吗 有了scons一切都边的简单了 最近研究了下scons 发现和makefile相比 soncs编译c和c 程序真的太方便了 搞程序什么做好 当然是简单实用最好下面大家就一
  • unity学习总结

    unity短期学习小知识总结 通过这些小知识我们就可以制作一个简单的小游戏了 具体如下 给游戏物体添加tag值 获取tag gameObject tag 设置游戏对象的tag值 gameObject tag Player 调用transfo
  • redis缓存穿透、缓存击穿、缓存雪崩区别和解决方案

    redis缓存穿透 缓存击穿 缓存雪崩区别和解决方案 设计一个缓存系统 不得不要考虑的问题就是 缓存穿透 缓存击穿与失效时的雪崩效应 前台请求 后台先从缓存中取数据 取到直接返回结果 取不到时从数据库中取 数据库取到更新缓存 并返回结果 数
  • 永磁同步电机矢量控制(三)——电流环 PI 参数整定(一)

    文章目录 1 预备知识 2 电流环PI参数整定 2 1 电流环的开环传递函数 2 2 电流环参数整定 2 2 1 I型系统配置 2 3 电流环带宽 1 预备知识 这节设计到的知识 包括自动控制系统的工程设计方法 通常情况下 一个实际系统可以
  • QT——创建一个智慧家居界面

    1 新建项目注意 在创建一个项目时 我们要根据需要选择一个基类 如下图所示 根据需要合理选择 2 初始代码解读 这里我选择的基类是Qwidget include widget h 自动引入widget这个类的头文件 widget继承了Qwi
  • 群晖服务器共享文件忘记密码,群晖synology NAS ds 1815+忘记google authenticator二次验证密码...

    群晖synology NAS为了登录安全起见 设置了google的二次验证 当换手机或者刷机前没有解除二次验证时 就悲剧了 输入帐号密码后 就要输入6位google的二次验证吗 群晖登录不了 让你联系管理员 我就是管理员 点手机丢失 没有开
  • How to Debug the Eclipse C/C++ Indexer

    This page will guideline you to debug the C C Indexer in Eclipse when you meet C C Indexer Issues like below 1 Eclipse t
  • pthread_cond_wait pthread_cond_broadcast条件变量时要注意

    include