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

【练习】条件变量:创建三个线程 id号为ABC,三个线程循环打印自己的ID号,运行顺序为 ABCABC

题目:

  • 创建三个线程 id号为ABC,三个线程循环打印自己的ID号,运行顺序为 ABCABC......
  • 要求使用条件变量
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>//创建互斥锁
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
//条件变量创建
pthread_cond_t cond1 =PTHREAD_COND_INITIALIZER;
pthread_cond_t cond2 =PTHREAD_COND_INITIALIZER;
pthread_cond_t cond3 =PTHREAD_COND_INITIALIZER;
//限制访问机制
int flag=1;void* callback1(void* arg)
{while(1){/*************临界区**************///上锁pthread_mutex_lock(&mutex);if(flag != 1){//休眠 解锁pthread_cond_wait(&cond1,&mutex);}printf("A");flag=2;//唤醒pthread_cond_signal(&cond2);//解锁pthread_mutex_unlock(&mutex);/*************临界区**************/}pthread_exit(NULL);
}
void* callback2(void* arg)
{while(1){/*************临界区**************///上锁pthread_mutex_lock(&mutex);if(flag != 2){//休眠 解锁pthread_cond_wait(&cond2,&mutex);}printf("B");flag=3;//唤醒pthread_cond_signal(&cond3);//解锁pthread_mutex_unlock(&mutex);/*************临界区**************/}pthread_exit(NULL);}
void* callback3(void* arg)
{while(1){/*************临界区**************///上锁pthread_mutex_lock(&mutex);if(flag != 3){//休眠 解锁pthread_cond_wait(&cond3,&mutex);}printf("C\n");flag=1;//唤醒pthread_cond_signal(&cond1);//解锁pthread_mutex_unlock(&mutex);/*************临界区**************/}pthread_exit(NULL);}int main(int argc, const char *argv[])
{//练习1.创建三个线程id号为ABC,要求三个线程循环打印自己的ID号, 运行顺序为ABCAB.....pthread_t A,B,C;if(pthread_create(&A,NULL,callback1,NULL)!=0){fprintf(stderr,"pthread_create faild __%d__\n",__LINE__);return -1;}if(pthread_create(&B,NULL,callback2,NULL)!=0){fprintf(stderr,"pthread_create faild __%d__\n",__LINE__);return -1;}if(pthread_create(&C,NULL,callback3,NULL)!=0){fprintf(stderr,"pthread_create faild __%d__\n",__LINE__);                             return -1;}pthread_join(A,NULL);pthread_join(B,NULL);pthread_join(C,NULL);//销毁互斥锁pthread_mutex_destroy(&mutex);//销毁条件变量pthread_cond_destroy(&cond1);pthread_cond_destroy(&cond2);pthread_cond_destroy(&cond3);return 0;
}

运行结果:死循环输出ABC\n

ubuntu@ubuntu:04_pthread$ gcc t3.3pthread.c -pthread
ubuntu@ubuntu:04_pthread$ ./a.out 
ABC
ABC
ABC
ABC
ABC

http://www.lryc.cn/news/108820.html

相关文章:

  • SpringBoot项目修改中静态资源,只需刷新页面无需重启项目(附赠—热加载)
  • clear_data_code_2d_model
  • “深入剖析JVM:揭秘Java虚拟机的工作原理“
  • elementui表格table中实现内容的换行
  • java 框架
  • 死锁的发生原因和怎么避免
  • visual studio 生成dll文件以及修改输出dll文件名称操作
  • 【Leetcode】73.矩阵置零
  • zabbix监控mysql容器主从同步状态并告警钉钉/企业微信
  • ARM 常见汇编指令学习 9 - 缓存管理指令 DC 与 IC
  • 落地数字化管理,提升企业市场竞争力
  • 2023华数杯数学建模竞赛C题思路解析
  • Photon之如何解决Photon Server无法在局域网使用的bug
  • Redis两种持久化方案RDB持久化和AOF持久化
  • 银河麒麟v10 vnc环境配置
  • 【动态内存管理助力程序优化与性能飞升】
  • 电动汽车设计、制造、研发的学科、技术和前沿科技综述
  • NsPack3.x脱壳手记
  • 在.net 6.0中 调用远程服务器web服务,Webservices(xxx.asmx) ,RESTful 风格,2种解决方案。
  • 深度学习基础01-深度学习简介
  • Flink DataStream API详解
  • 【如何使用cv::erode()函数对图像进行腐蚀操作】
  • C++数据结构之BST(二叉搜索树)的实现
  • QT以管理员身份运行
  • java中的缓冲流
  • 【小吉带你学Git】idea操作(1)_配置环境并进行基本操作
  • DP-GAN-生成器代码
  • 2020-2023中国高等级自动驾驶产业发展趋势研究
  • JDK19 - synchronized关键字导致的虚拟线程PINNED
  • 用msys2安装verilator并用spinal进行仿真