IO进程寒假作业DAY6

请使用互斥锁 和 信号量分别实现5个线程之间的同步

使用互斥锁

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
//创建锁
pthread_mutex_t m1;
pthread_mutex_t m2;
pthread_mutex_t m3;
pthread_mutex_t m4;
pthread_mutex_t m5;void *task1(void *arg)
{while(1){pthread_mutex_lock (&m1);printf("线程1\n");sleep(1);pthread_mutex_unlock (&m2);}
}void *task2(void *arg)
{while(1){pthread_mutex_lock (&m2);printf("线程2\n");sleep(1);pthread_mutex_unlock (&m3);}
}void *task3(void *arg)
{while(1){pthread_mutex_lock (&m3);printf("线程3\n");sleep(1);pthread_mutex_unlock (&m4);}
}void *task4(void *arg)
{while(1){pthread_mutex_lock (&m4);printf("线程4\n");sleep(1);pthread_mutex_unlock (&m5);}
}void *task5(void *arg)
{while(1){pthread_mutex_lock (&m5);printf("线程5\n");sleep(1);pthread_mutex_unlock (&m1);}
}int main(int argc, const char *argv[])
{//请使用互斥锁 和 信号量分别实现5个线程之间的同步	//初始化锁pthread_mutex_init(&m1,NULL);pthread_mutex_init(&m2,NULL);pthread_mutex_init(&m3,NULL);pthread_mutex_init(&m4,NULL);pthread_mutex_init(&m5,NULL);//上锁分支线程中的锁pthread_mutex_lock(&m2);pthread_mutex_lock(&m3);pthread_mutex_lock(&m4);pthread_mutex_lock(&m5);//创建线程idpthread_t id1,id2,id3,id4,id5;//创建线程pthread_create(&id1,0,task1,0);pthread_create(&id2,0,task2,0);pthread_create(&id3,0,task3,0);pthread_create(&id4,0,task4,0);pthread_create(&id5,0,task5,0);//设置分离属性pthread_detach(id1);pthread_detach(id2);pthread_detach(id3);pthread_detach(id4);pthread_detach(id5);task1(NULL);return 0;
}

运行现象

使用信号量

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
//创建信号量变量
sem_t s1;
sem_t s2;
sem_t s3;
sem_t s4;
sem_t s5;void *task1(void *arg)
{while(1){sem_wait (&s1);printf("线程1\n");sleep(1);sem_post (&s2);	}
}void *task2(void *arg)
{while(1){sem_wait (&s2);printf("线程2\n");sleep(1);	sem_post (&s3);	}
}void *task3(void *arg)
{while(1){sem_wait (&s3);printf("线程3\n");sleep(1);sem_post (&s4);}
}void *task4(void *arg)
{while(1){sem_wait (&s4);printf("线程4\n");sleep(1);sem_post (&s5);}
}void *task5(void *arg)
{while(1){sem_wait (&s5);printf("线程5\n");sleep(1);sem_post(&s1);}
}int main(int argc, const char *argv[])
{//请使用互斥锁 和 信号量分别实现5个线程之间的同步	//初始化信号量sem_init(&s1,0,1);sem_init(&s2,0,0);sem_init(&s3,0,0);sem_init(&s4,0,0);sem_init(&s5,0,0);//创建线程idpthread_t id1,id2,id3,id4,id5;//创建线程pthread_create(&id1,0,task1,0);pthread_create(&id2,0,task2,0);pthread_create(&id3,0,task3,0);pthread_create(&id4,0,task4,0);pthread_create(&id5,0,task5,0);//设置分离属性pthread_detach(id1);pthread_detach(id2);pthread_detach(id3);pthread_detach(id4);pthread_detach(id5);task1(NULL);return 0;
}

 运行现象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9104.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis(112/134)

多对一 第一种方法&#xff1a; 一的表参数设置&#xff1a; <association property"clazz" javaType"Clazz"> <id property"cid" column"cid"/> <result property"cname" column"cname"/> <…

读书笔记:《华为突围ERP封锁全纪实》

文章背景&#xff1a; 2019年5月&#xff0c;华为被美国制裁&#xff0c;其ERP系统面临断供风险。ERP系统是企业核心管理软件&#xff0c;一旦中断&#xff0c;华为的全球业务将陷入瘫痪。面对这一生死存亡的危机&#xff0c;华为启动了“突围”计划&#xff0c;历经数年艰苦奋…

【C++】设计模式详解:单例模式

文章目录 Ⅰ. 设计一个类&#xff0c;不允许被拷贝Ⅱ. 请设计一个类&#xff0c;只能在堆上创建对象Ⅲ. 请设计一个类&#xff0c;只能在栈上创建对象Ⅳ. 请设计一个类&#xff0c;不能被继承Ⅴ. 请设计一个类&#xff0c;只能创建一个对象&#xff08;单例模式&#xff09;&am…

K8s运维管理平台 - KubeSphere 3.x 和4.x 使用分析:功能较强,UI美观

目录标题 Lic使用感受优点&#xff1a;优化点&#xff1a; 实操首页项目 | 应用负载 | 配置 | 定制资源定义存储监控告警集群设置 **KubeSphere 3.x** 和 **4.x**1. **架构变化**&#xff1a;2. **多集群管理**&#xff1a;3. **增强的 DevOps 功能**&#xff1a;4. **监控与日…

SpringBoot或SpringAI对接DeekSeek大模型

今日除夕夜&#xff0c;deepseek可是出尽了风头&#xff0c;但是我看网上还没有这方面的内容对接&#xff0c;官网也并没有&#xff0c;故而本次对接是为了完成这个空缺 我看很多的博客内容是流式请求虽然返回时正常的&#xff0c;但是他并不是实时返回&#xff0c;而是全部响应…

低代码系统-产品架构案例介绍、明道云(十一)

明道云HAP-超级应用平台(Hyper Application Platform)&#xff0c;其实就是企业级应用平台&#xff0c;跟微搭类似。 通过自设计底层架构&#xff0c;兼容各种平台&#xff0c;使用低代码做到应用搭建、应用运维。 企业级应用平台最大的特点就是隐藏在冰山下的功能很深&#xf…

文献阅读 250128-Tropical forests are approaching critical temperature thresholds

Tropical forests are approaching critical temperature thresholds 来自 <Tropical forests are approaching critical temperature thresholds | Nature> 热带森林正在接近临界温度阈值 ## Abstract: The critical temperature beyond which photosynthetic machinery…

判断子序列

hello 大家好&#xff01;今天开写一个新章节&#xff0c;每一天一道算法题。让我们一起来学习算法思维吧&#xff01; function isSubsequence(s, t) {// 初始化两个指针&#xff0c;分别指向字符串 s 和 t 的起始位置let i 0; let j 0; // 当两个指针都未超出对应字符串的长…

您与此网站之间建立的连接不安全

网站建立好后&#xff0c;用360浏览器打开后地址栏有一个灰色小锁打着红色叉点击后显示“您与此网站之间建立的连接不安全”“请勿在此网站上输入任何敏感信息&#xff08;例如密码或信用卡信息&#xff09;&#xff0c;因为攻击者可能会盗取这些信息。” 出现这个提示的主要原…

解读隐私保护工具 Fluidkey:如何畅游链上世界而不暴露地址?

作者&#xff1a;Techub 独家解读 撰文&#xff1a;Tia&#xff0c;Techub News 隐私不只是个人权利的象征&#xff0c;更是我们迈向透明、信任未来的重要过渡桥梁。如果你还未意识到隐私的重要性&#xff0c;推荐阅读 KeyMapDAO 的文章《「被出卖的自由」&#xff1a;我到底该…

uniapp 地图添加,删除,编辑标记,在地图中根据屏幕范围中呈现标记

前言 小程序实现新功能&#xff0c;在地图中选取位置添加标记&#xff0c;并在地图中呈现添加的标记&#xff0c;&#xff08;呈现的是根据当前屏幕范围内的标记&#xff09;&#xff0c;并对标记进行分享&#xff0c;删除&#xff0c;编辑&#xff0c;导航&#xff0c;并从分…

DPO、KTO、DiffusionDPO

DPO&#xff08;Direct Preference Optimization&#xff09; 原文来自于 https://arxiv.org/pdf/2305.18290&#xff0c; Bradley-Terry (BT)模型&#xff0c;假设人的喜欢遵循下面的公式&#xff0c;给定x&#xff0c;得到 y 1 y_1 y1​和 y 2 y_2 y2​分别遵循以下关系&am…

Android Studio安装配置

一、注意事项 想做安卓app和开发板通信&#xff0c;踩了大坑&#xff0c;Android 开发不是下载了就能直接开发的&#xff0c;对于新手需要注意的如下&#xff1a; 1、Android Studio版本&#xff0c;根据自己的Android Studio版本对应决定了你所兼容的AGP&#xff08;Android…

GPU上没程序在跑但是显存被占用

原因&#xff1a;存在僵尸线程&#xff0c;运行完但是没有释放内存 查看僵尸线程 fuser -v /dev/nvidia*关闭僵尸线程 pkill -9 -u 用户名 程序名 举例&#xff1a;pkill -9 -u grs python参考&#xff1a;https://blog.csdn.net/qq_40206371/article/details/143798866

JAVA实战开源项目:蜗牛兼职平台(Vue+SpringBoot) 附源码

本文项目编号 T 034 &#xff0c;文末自助获取源码 \color{red}{T034&#xff0c;文末自助获取源码} T034&#xff0c;文末自助获取源码 目录 一、系统介绍1.1 平台架构1.2 管理后台1.3 用户网页端1.4 技术特点 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景…

DeepSeek LLM解读

背景&#xff1a; 量化巨头幻方探索AGI&#xff08;通用人工智能&#xff09;新组织“深度求索”在成立半年后&#xff0c;发布的第一代大模型DeepSeek试用地址&#xff1a;DeepSeek &#xff0c;免费商用&#xff0c;完全开源。作为一家隐形的AI巨头&#xff0c;幻方拥有1万枚…

用WinForm如何制作简易计算器

首先我们要自己搭好页面 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace _7_简易计算…

Luzmo 专为SaaS公司设计的嵌入式数据分析平台

Luzmo 是一款嵌入式数据分析平台&#xff0c;专为 SaaS 公司设计&#xff0c;旨在通过直观的可视化和快速开发流程简化数据驱动决策。以下是关于 Luzmo 的详细介绍&#xff1a; 1. 背景与定位 Luzmo 前身为 Cumul.io &#xff0c;专注于为 SaaS 公司提供嵌入式分析解决方案。…

Openfga 授权模型搭建

1.根据项目去启动 配置一个 openfga 服务器 先创建一个 config.yaml文件 cd /opt/openFGA/conf touch ./config.yaml 怎么配置&#xff1f; 根据官网来看 openfga/.config-schema.json at main openfga/openfga GitHub 这里讲述详细的每一个配置每一个类型 这些配置有…

【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR、流水线及伪指令

文章目录 指令格式&#xff08;重点&#xff09;1. 立即数2. 寄存器位移 一、数据传送指令1. MOV指令2. MVN指令3. LDR指令 二、数据计算指令1. ADD指令1. SUB指令1. MUL指令 三、位运算指令1. AND指令2. ORR指令3. EOR指令4. BIC指令 四、比较指令五、跳转指令1. B/BL指令2. l…