IO进程线程8月27日

news2024/12/23 18:28:26

1,思维导图

2,使用两个线程分别复制文件的上下两部分到同一个文件

#include<myhead.h>
sem_t fastsem;
//pthread_mutex_t fastmutex;
void *capy_up(void *c)
{
//	pthread_mutex_lock(&fastmutex);
	int len=*(int *)c;
	int fp1=open("./1.txt",O_RDONLY);
	int fp2=open("./2.txt",O_WRONLY);
	char str[5];
	int read_cs;
	int count=0;
	while(count<len/2&&(read_cs=read(fp1,str,sizeof(str)))>0)
	{
		count+=read_cs;
		if(count>len/2)
		{
			write(fp2,str,(read_cs-(count-len/2)));
			break;
		}
		write(fp2,str,read_cs);
	}
	close(fp1);
	close(fp2);
	sem_post(&fastsem);
//	pthread_mutex_unlock(&fastmutex);
	pthread_exit(NULL);
}
void *capy_dn(void *c)
{
//	pthread_mutex_lock(&fastmutex);
	sem_wait(&fastsem);
	int len=*(int *)c;
	int fp3=open("./1.txt",O_RDONLY);
	int fp4=open("./2.txt",O_WRONLY|O_APPEND);
	lseek(fp3,len/2,SEEK_SET);
	char str[5];
	int read_cs;
	int count=0;
	while((read_cs=read(fp3,str,sizeof(str)))>0)
	{
		write(fp4,str,read_cs);
	}
	close(fp3);
	close(fp4);
//	pthread_mutex_unlock(&fastmutex);
	sem_post(&fastsem);
	pthread_exit(NULL);
}

int main(int argc, const char *argv[])
{
//	pthread_mutex_init(&fastmutex,NULL);
	sem_init(&fastsem,0,0);
	int fp1=open("./1.txt",O_RDONLY);
	int fp2=open("./2.txt",O_WRONLY|O_CREAT|O_TRUNC,0664);
	int len=lseek(fp1,0,SEEK_END);
	close(fp1);
	close(fp2);
	pthread_t tid1;
	int k1=pthread_create(&tid1,NULL,capy_up,&len);
	pthread_t tid2;
	int k2=pthread_create(&tid2,NULL,capy_dn,&len);
	if(k1!=0||k2!=0)
	{
		perror("ptcreat");
		return -1;
	}
//	pthread_mutex_destroy(&fastmutex);
	sem_destroy(&fastsem);
	pthread_join(tid1,NULL);
	pthread_join(tid2,NULL);
	return 0;
}

3,使用四个线程通过无名信号量实现 “春“ ”夏“ ”秋“ ”冬“ 循环

#include<myhead.h>
sem_t sem1,sem2,sem3,sem4;
void *fun1(void *c)
{
	while(1)
	{
		sem_wait(&sem4);
		sleep(1);
		printf("春\t");
		fflush(stdout);
		sem_post(&sem3);
	}
	pthread_exit(NULL);
}
void *fun2(void *x)
{
	while(1)
	{
		sem_wait(&sem3);
		sleep(1);
		printf("夏\t");
		fflush(stdout);
		sem_post(&sem2);
	}
	pthread_exit(NULL);
}
void *fun3(void *q)
{
	while(1)
	{
		sem_wait(&sem2);
		sleep(1);
		printf("秋\t");
		fflush(stdout);
		sem_post(&sem1);
	}
	pthread_exit(NULL);
}
void *fun4(void *d)
{
	while(1)
	{
		sem_wait(&sem1);
		sleep(1);
		printf("冬\t");
		fflush(stdout);
		sem_post(&sem4);
	}
	pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
	sem_init(&sem1,0,0);
	sem_init(&sem2,0,0);
	sem_init(&sem3,0,0);
	sem_init(&sem4,0,1);
	pthread_t tid1,tid2,tid3,tid4;
	if(pthread_create(&tid1,NULL,fun1,NULL)!=0)
	{
		perror("ptcreat1");
		return -1;
	}
	if(pthread_create(&tid2,NULL,fun2,NULL)!=0)
	{
		perror("ptcreat1");
		return -1;
	}
	if(pthread_create(&tid3,NULL,fun3,NULL)!=0)
	{
		perror("ptcreat1");
		return -1;
	}
	if(pthread_create(&tid4,NULL,fun4,NULL)!=0)
	{
		perror("ptcreat1");
		return -1;
	}
	sem_destroy(&sem1);
	sem_destroy(&sem2);
	sem_destroy(&sem3);
	sem_destroy(&sem4);
	pthread_join(tid1,NULL);
	pthread_join(tid2,NULL);
	pthread_join(tid3,NULL);
	pthread_join(tid4,NULL);
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32的IAP

STM32的IAP(In-Application Programming,在应用编程)地址主要涉及IAP程序本身的存储地址以及它所要操作的应用程序(APP)的存储地址。这些地址通常与STM32的FLASH存储器映射相关,并且可以根据具体的STM32型号和IAP程序的设计进行调整。 1. IAP程序存储地址 IAP程序本身…

可视耳勺好用吗?四大可视挖耳勺超值好物分享!

在近年来&#xff0c;可视挖耳勺以其高效的清洁效能&#xff0c;逐渐成为备受青睐的护理产品设备。面对市面上琳琅满目的可视挖耳勺品牌&#xff0c;其质量参差不齐&#xff0c;用户在选择时往往面临着挑战。劣质可视挖耳勺不仅不能达到应有的清洁效果&#xff0c;还可能由于不…

我要做全栈:自学前端第一天

大家好&#xff0c;今天要介绍的是我自学前端的一些经验。 前端想要知道学习哪些内容&#xff0c;首先要知道前端的结构是什么样的&#xff0c;前端是有哪些东西构成的。 所以我先了解了前端的构成是由三部分&#xff1a; 1、HTML&#xff1a;定义了网页的结构 2、CSS&…

DDOS攻击学习-渗透测试-域名信息收集

文章目录 wordpress漏洞利用域名信息收集域名介绍域名分类 whoiswhois反查子域名收集子域名发现网络空间安全搜索引擎SSL证书查询js文件发现子域名 wordpress漏洞利用 这个一般都需要安装wordpress服务使用wpscan扫描&#xff0c;但现在一般很少人知道或者使用wordpress所以这个…

Tkinter Checkbutton设置了一个多选,为什么初始值都是勾选的:

代码如下&#xff1a; from tkinter import *master Tk()renyuan ["唐僧", "沙僧", "悟空", "八戒"]def r_change():rec ""ci 0for el in vars:rec el.get() "、"ci 1rec "九点" rec "离…

论文速览【LLM】 —— 【ORLM】Training Large Language Models for Optimization Modeling

标题&#xff1a;ORLM: Training Large Language Models for Optimization Modeling文章链接&#xff1a;ORLM: Training Large Language Models for Optimization Modeling代码&#xff1a;Cardinal-Operations/ORLM发表&#xff1a;2024领域&#xff1a;使用 LLM 解决运筹优化…

浙商之源——龙游商帮丨情义担当与信誉丰碑——姜益大布行

在龙游这片古老而繁华的土地上&#xff0c;流传着一段关于龙商精神的光辉篇章——姜益大的故事。这不仅是一段商业传奇&#xff0c;更是龙游商人智慧、勇气与诚信的生动写照。 初来乍到&#xff0c;逆锋起笔 清朝同治六年(1867)&#xff0c;安徽绩溪人姜德明在龙游商帮朋友点拨…

《JavaEE进阶》----2.<Spring前传:Maven项目管理工具>

本篇博客讲解我们在使用Spring框架时所要用到的Maven这个项目管理工具 它可以更方便的管理我们的项目&#xff0c;比如通过 1.常用的Maven命令来进行编译、测试、打包、清理包等等&#xff0c;不仅如此&#xff0c; 2.Maven还可以对依赖进行管理&#xff0c;方便我们添加依赖、…

信息打点-资产泄露CMS识别Git监控SVNDS_Store备份

知识点&#xff1a; 1、CMS指纹识别源码获取方式&#xff1b; 2、习惯&配置&特性等获取方式&#xff1b; 3、托管资产平台资源搜索监控&#xff1b; 详细点&#xff1a; 参考&#xff1a;https://www.secpulse.com/archives/124398.html 源码泄露原因&#xff1a; …

fastjson序列化时过滤字段的方法

在使用fastjson进行序列化时&#xff0c;可能需要根据实际需求过滤掉某些字段&#xff0c;以避免将敏感信息或不必要的字段发送到客户端。fastjson提供了多种灵活的方式来实现这一需求。以下整理了fastjson序列化时过滤字段的几种常用方法。 方法一&#xff1a;使用fastjson的…

Windows10激活__“亲测有效”无需秘钥

目录 前言 1. 鼠标“右键”点击“开始菜单” 2. 点击选择“Windows PowerShell&#xff08;管理员&#xff09;” 3. 在该终端窗口&#xff0c;输入“ irm "https://get.activated.win" |iex ” 4. 按下“Enter”键&#xff0c;回车执行该命令 5. 按下数字键盘…

如何使用 Python 和 Selenium 解决 Cloudflare 验证码

在网络自动化测试或网页数据抓取的过程中&#xff0c;Cloudflare验证码是许多开发者遇到的棘手问题。这一验证码设计的初衷是为了保护网站免受恶意攻击&#xff0c;但它也给合法的自动化操作带来了不小的挑战。 那么&#xff0c;使用Python和Selenium&#xff0c;是否有办法有…

PCL 点云ISS关键点提取算法

目录 一、概述二、代码示例三、运行结果📌 结果预览 🔗接上篇 Python 点云ISS关键点提取算法 一、概述 点云ISS关键点(Intrinsic Shape Signatures):利用点云中每个点的局部邻域的协方差矩阵来分析局部几何结构。协方差矩阵的特征值可以揭示局部几何形状的显著性。通…

通过websock实现实时刷新前端(可实现进度条)

业务场景&#xff1a; 领导让我们做一个根据进度实时刷新的进度条&#xff0c;如下所示 后面去网上查了下&#xff0c;可以通过websocket这种双向通信协议的持久链接实现。 配置 创建配置类&#xff0c;启用websocket支持 import org.springframework.context.annotation.…

进阶-task1-深度学习理论基础

学习目标&#xff1a; 从不同的角度更好地优化神经网络 熟悉临界点等与优化有关的常见的概念网络优化失败的常见原因常用的解决/优化方案 具体内容&#xff1a; 网络优化常见的问题&#xff1f; 损失函数Loss不再下降&#xff0c;但是收敛值不合理 深层网络反而不如浅层网…

【扩散模型(七)】IP-Adapter 与 IP-Adapter Plus 的具体区别是什么?

系列文章目录 【扩散模型&#xff08;二&#xff09;】IP-Adapter 从条件分支的视角&#xff0c;快速理解相关的可控生成研究【扩散模型&#xff08;三&#xff09;】IP-Adapter 源码详解1-训练输入 介绍了训练代码中的 image prompt 的输入部分&#xff0c;即 img projection…

19c库启动报ORA-600 kcbzib_kcrsds_1---惜分飞

一套19c的库由于某种情况,发现异常,当时的技术使用隐含参数强制拉库,导致数据库启动报ORA-00704 ORA-600 kcbzib_kcrsds_1错误 2024-08-24T06:11:25.49430408:00 ALTER DATABASE OPEN 2024-08-24T06:11:25.49437008:00 TMI: adbdrv open database BEGIN 2024-08-24 06:11:25.49…

Iptables-快速上手

Iptables firewall 防火墙Iptables简述一、Iptables的四表五链1.filter表2.nat表3.raw表4. mangle表5.数据包的流通过程 二、快速上手1. 查看规则2. 规则详细3. 添加规则4. 自定义链 三、关于iptables和docker1. 背景2. 解决方案 firewall 防火墙 从逻辑上讲&#xff0c;可以分…

【国外比较权威的免费的卫星数据网站】

国外比较权威的免费卫星数据网站有多个&#xff0c;它们各自在数据覆盖范围、分辨率、以及数据种类等方面具有不同的特点和优势。以下是一些推荐的网站&#xff1a; NASA Worldview 网址&#xff1a;https://worldview.earthdata.nasa.gov/简介&#xff1a;NASA Worldview显示…

Visual Studio解决scanf不能正常输入的问题

总所周知&#xff0c;vs中直接使用scanf会报错&#xff0c;用scanf_s就不会&#xff0c;然而很多时候我们用的还是scanf&#xff0c;下面讲解如何在vs中使用scanf &#x1f381;1.添加#define _CRT_SECURE_NO_WARNINGS 不做任何处理&#xff0c;会出现的报错 注意下方的C499…