1.7 day5 IO进程线程

互斥锁

#include <myhead.h>
char buf[128];//创建临界资源
pthread_mutex_t mutex;//创建锁
void *task(void *arg)//分支线程
{while(1){pthread_mutex_lock(&mutex);//上锁printf("分支线程:buf=%s\n",buf);strcpy(buf,"I Love China");pthread_mutex_unlock(&mutex);//解锁}pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{//创建分支线程pthread_t tid;pthread_mutex_init(&mutex,NULL);//初始化锁if(pthread_create(&tid,NULL,task,NULL)!=0){printf("tid create error");return -1;}while(1){pthread_mutex_lock(&mutex);printf("主线程:buf=%s\n",buf);strcpy(buf,"hello world");pthread_mutex_unlock(&mutex);}pthread_join(tid,NULL);//回收分支线程pthread_mutex_destroy(&mutex);//销毁锁return 0;
}

无名信号量

#include <myhead.h>
char buf[128];//创建临界资源
sem_t sem;//创建无名信号量
void *task(void *arg)//分支线程
{while(1){sleep(1);sem_post(&sem);//释放资源printf("我生产了一辆特斯拉\n");}pthread_exit(NULL);
}
void *task2(void *arg)//分支线程
{while(1){sem_wait(&sem);//申请资源printf("我消费了一辆特斯拉\n");}pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{//创建分支线程pthread_t tid,tid2;sem_init(&sem,0,0);//初始化无名信号量if(pthread_create(&tid,NULL,task,NULL)!=0){printf("tid create error");return -1;}if(pthread_create(&tid2,NULL,task2,NULL)!=0){printf("tid2 create error");return -1;}pthread_join(tid2,NULL);pthread_join(tid,NULL);//回收分支线程sem_destroy(&sem);//销毁无名信号量return 0;
}

三个线程拷贝

#include <myhead.h>
void *task1(void *arg)
{int len=*((int *)arg);int fd,cfd;if((fd=open("./test.bmp",O_RDONLY))==-1){perror("open error");}if((cfd=open("./aa.bmp",O_WRONLY))==-1){perror("open error");}char buf[128]="";int res;int sum=0;lseek(fd,0,SEEK_SET);lseek(cfd,0,SEEK_SET);while((res=read(fd,buf,sizeof(buf)))!=0){sum+=res;if(sum>=len){write(cfd,buf,res-(sum-len));break;}write(cfd,buf,res);}close(fd);close(cfd);pthread_exit(NULL);
}
void *task2(void *arg)
{int len=*((int *)arg);int fd,cfd;if((fd=open("./test.bmp",O_RDONLY))==-1){perror("open error");}if((cfd=open("./aa.bmp",O_WRONLY))==-1){perror("open error");}char buf[128]="";int res;lseek(fd,len,SEEK_SET);lseek(cfd,len,SEEK_SET);while((res=read(fd,buf,sizeof(buf)))!=0){write(cfd,buf,res);}close(fd);close(cfd);pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{int fd,cfd;if((fd=open("./test.bmp",O_RDONLY))==-1){perror("open error");return -1;}if((cfd=open("./aa.bmp",O_WRONLY|O_CREAT|O_TRUNC,0664))==-1){perror("open error");return -1;}int len=lseek(fd,0,SEEK_END)/2;pthread_t tid1,tid2;if(pthread_create(&tid1,NULL,task1,&len)!=0){printf("tid1 create error\n");return -1;}if(pthread_create(&tid2,NULL,task2,&len)!=0){printf("tid2 create error\n");return -1;}close(fd);close(cfd);pthread_join(tid1,NULL);pthread_join(tid2,NULL);return 0;
}

三个线程输出ABC

#include <myhead.h>
char buf[128];//创建临界资源
sem_t sem1;//创建无名信号量
sem_t sem2;//创建无名信号量
sem_t sem3;//创建无名信号量
void *task(void *arg)//分支线程
{while(1){sem_wait(&sem1);//申请资源printf("A");sem_post(&sem2);//释放资源}pthread_exit(NULL);
}
void *task2(void *arg)//分支线程
{while(1){sem_wait(&sem2);//申请资源printf("B");sem_post(&sem3);//释放资源}pthread_exit(NULL);
}
void *task3(void *arg)//分支线程
{while(1){sem_wait(&sem3);//申请资源printf("C\n");sem_post(&sem1);//释放资源}pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{//创建分支线程pthread_t tid,tid2,tid3;sem_init(&sem1,0,1);//初始化无名信号量sem1sem_init(&sem2,0,0);//初始化无名信号量sem2sem_init(&sem3,0,0);//初始化无名信号量sem3if(pthread_create(&tid,NULL,task,NULL)!=0){printf("tid create error");return -1;}if(pthread_create(&tid2,NULL,task2,NULL)!=0){printf("tid2 create error");return -1;}if(pthread_create(&tid3,NULL,task3,NULL)!=0){printf("tid3 create error");return -1;}pthread_join(tid,NULL);//回收分支线程pthread_join(tid2,NULL);//回收分支线程pthread_join(tid3,NULL);//回收分支线程sem_destroy(&sem1);//销毁无名信号量sem1sem_destroy(&sem2);//销毁无名信号量sem2sem_destroy(&sem3);//销毁无名信号量sem3return 0;
}

 

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

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

相关文章

Priors in Deep Image Restoration and Enhancement: A Survey

深度图像恢复和增强中的先验&#xff1a;综述 论文链接&#xff1a;https://arxiv.org/abs/2206.02070 项目链接&#xff1a;https://github.com/VLIS2022/Awesome-Image-Prior (Preprint. Under review) Abstract 图像恢复和增强是通过消除诸如噪声、模糊和分辨率退化等退化…

【UE Niagara学习笔记】01 - 浮动的蒲公英

目录 效果 步骤 一、创建材质 二、创建Niagara粒子 2.1 创建Niagara模板 2.2 通过用户参数设置粒子大小 2.3 设置数量、风速、透明度变化 效果 步骤 一、创建材质 1. 在虚幻商城中把“Realistic Starter VFX Pack Vol 2”添加到项目中&#xff0c;该资产中所包含的…

5.vue学习笔记(数组变化的侦测+计算属性+Class绑定)

文章目录 1.数组变化的侦测1.1.变更方法1.2.替换一个数组 2.计算属性计算属性缓存vs方法 3.Class绑定3.1.绑定对象3.2.多个对象的绑定形式3.3.绑定数组3.4.数组与对象 1.数组变化的侦测 1.1.变更方法 vue能够侦听响应式数组的变更方法&#xff0c;并在它们被调用时出发相关的…

WorkPlus Meet打造高质量的视频会议体验,助力实时远程协作

在全球化的商业环境中&#xff0c;远程协作和在线会议成为了企业高效工作的关键。作为一款高质量的视频会议软件&#xff0c;WorkPlus Meet以其卓越的性能和创新的功能&#xff0c;成为企业实时远程协作的首选。 WorkPlus Meet打造了高质量的视频会议体验&#xff0c;为企业提供…

深度学习:解决CNN的困境——胶囊网络

从2017年底到2018年初&#xff0c;整个人工智能学术研究领域谈论最多的应该就是被誉为深度学习之父Geoffrey E. Hinton 发表的论文 Dynamic Routing Between Capsules,其中介绍了全新的深度学习模型——胶囊网络&#xff08;Capsule Network&#xff09; 1. 普通CNN的困境 虽…

PIG框架学习2——资源服务器的配置详解

一、前言 1、pig资源服务器的配置 Spring Security oauth2相关的依赖是在pigx-common-security模块中引入的&#xff0c;其他模块需要进行token鉴权的&#xff0c;需要在微服务中引入pigx-common-security模块的依赖&#xff0c;从而间接引入相关的Spring security oauth2依赖…

软件测试|Docker cp命令详解:在Docker容器和主机之间复制文件/文件夹

简介 Docker是一种流行的容器化平台&#xff0c;它允许开发人员在独立、可移植的环境中构建、打包和部署应用程序。在使用Docker时&#xff0c;常常需要在Docker容器和主机之间进行文件的复制和共享。Docker提供了一个名为docker cp的命令&#xff0c;可以轻松地在容器和主机之…

欧拉函数算法总结

知识概览 欧拉函数为1~n中与n互质的数的个数。假设一个数N分解质因数后的结果为 则欧拉函数 这可以用容斥原理来证明。 欧拉函数的应用 欧拉定理&#xff1a;若a与n互质&#xff0c;则。 费马小定理&#xff1a;欧拉定理中的n为质数p时&#xff0c;可以得到若a与p互质&#xff…

Vue 自定义仿word表单下拉框组件,让操作更符合用户习惯

预览时显示界面 进入编辑框时 组件代码 <template><div class "paper-select ui-select flex flex-col full-width" ><div ref"content" class"content font-s flex flex-center-cz padding-left-m padding-right-m flex-space-be…

MBTI职业性格测试 28题(免费版)

MBTI职业性格测试概述 MBTI是现在国际上最为流行的测试工具&#xff0c;利用MBTI职业性格测试&#xff0c;可以清楚地找到自己的性格特点以及兴趣爱好&#xff0c;方便于对职业进行规划、以及改善人际关系。其主要应用心理学常识对个性做出判断&#xff0c;提炼出动力、信息收…

VMware Workstation——修改虚拟机配置和设置网络

目录 一、修改配置 1、点击需要修改配置的虚拟机&#xff0c;然后点击编辑虚拟机配置 2、修改内存、CPU、硬盘配置 二、设置网络 1、从虚拟机配置中进入到网络适配器设置 2、选择网络连接模式 一、修改配置 1、点击需要修改配置的虚拟机&#xff0c;然后点击编辑虚拟机配…

构建异地企业网络互联的高效路径

在当今数字化浪潮中&#xff0c;企业的业务拓展已不再受限于地理位置。为了在全球竞争中立于不败之地&#xff0c;越来越多的企业选择在不同城市设立分支机构&#xff0c;构建异地网络&#xff0c;实现高效的协同办公。本文将深入探讨在北上广等经济发达地区&#xff0c;如何通…