并发计算二三阶矩阵

        矩阵的计算随着阶数的上升会越发的复杂,假如使用C语言直接计算,按照C语言按部执行的特性,那将会消耗大量的时间,所以本文计划将矩阵公式分割为几个小块,使用并发的方式来同时将各个小块计算出来从而节省时间(误,单纯是作者为了复习并发的知识而已)

二三阶矩阵计算的C语言实现

        我们首先要判断用户输入的是几阶矩阵,简单的判断思路分为两中,一是根据用户输入的数字数来开方,二是根据用户输入的回车数量来判断,本文选择根据回车数量来判断;

        在不进行并发优化前,我们只需要根据矩阵阶数来按照公式计算即可,值得注意的是,若选用getchar函数来获取字符,需要对获取的字符进行转化,下述代码进行了简单的-48处理(懒ing)

#include<stdio.h>
#include<string.h>
int main(void)
{int matrixadd=0;int matrixflag=0;int icnt=0;int data[12]={0};printf("please input your matrix\r\n");for(icnt=0;icnt<12;icnt++){data[icnt]=getchar();if(data[icnt]==' '){icnt--;}else{if(data[2]=='\n' && data[5]=='\n'){matrixflag=4;break;}else if(data[3]=='\n' && data[7]=='\n' && data[11]=='\n'){matrixflag=9;}else{;}}}for(icnt=0;icnt<12;icnt++){data[icnt]=data[icnt]-48;}if(matrixflag==4){matrixadd=data[0]*data[4]-data[1]*data[3];}else if(matrixflag==9){matrixadd=(data[0]*data[5]*data[10])+(data[1]*data[6]*data[8])+(data[2]*data[4]*data[9])-(data[0]*data[6]*data[9])-(data[2]*data[5]*data[8])-(data[10]*data[1]*data[4]);}else {printf("please input agent\n");return 0;}printf("the matrixadd is %d \n",matrixadd);
}

        上述代码中最不和谐的地方就是三阶矩阵的计算,假如阶数继续上升,那代码的执行效率将稳步下降,所以接下来将用并发的方式来脱裤子放屁式的把他优化了:

#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<unistd.h>
int matrixadd=1;
int data[12]={0};
void* culculate(void* arg)
{matrixadd=(data[0]*data[5]*data[10])+(data[1]*data[6]*data[8])+(data[2]*data[4]*data[9])-(data[0]*data[6]*data[9])-(data[2]*data[5]*data[8])-(data[10]*data[1]*data[4]);
}
int main(void)
{void *ret=NULL;pthread_t a;int matrixflag=0;int icnt=0;printf("please input your matrix\r\n");for(icnt=0;icnt<12;icnt++){data[icnt]=getchar();if(data[icnt]==' '){icnt--;}else{if(data[2]=='\n' && data[5]=='\n'){matrixflag=4;break;}else if(data[3]=='\n' && data[7]=='\n' && data[11]=='\n'){matrixflag=9;}else{;}}}for(icnt=0;icnt<12;icnt++){data[icnt]=data[icnt]-48;}if(matrixflag==4){matrixadd=data[0]*data[4]-data[1]*data[3];}else if(matrixflag==9){pthread_create(&a,NULL,culculate,NULL);if(pthread_create(&a,NULL,culculate,NULL)!=0){printf("failed to vreate thread\n");}sleep(1);}else {printf("please input agent\n");return 0;}printf("the matrixadd is %d \n",matrixadd);pthread_exit(ret);pthread_join(a,ret);
}

        上述代码的效率在阶数少的时候明显不如一开始的,甚至运行时间还延长了不少,除了加了sleep的原因外(为了在打印最终结果的时候,另一个线程执行完毕),创建线程也需要时间,所以这个代码只是用于娱乐,仅仅作为复习线程知识用,但计算大量数据时,这种思路无疑真的会优化效率,所以也不能说一无是处(233333333333)

 

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

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

相关文章

D88【python 接口自动化学习】- pytest基础用法

day88 pytest运行参数-q -s -v 学习日期&#xff1a;20241203 学习目标&#xff1a;pytest基础用法 -- pytest运行参数-q -s -v&pytest使用ini配置指定运行参数 学习笔记&#xff1a; pytest -q 说明&#xff1a;简化控制台的输出 pytest -q .\testcases\test_reques…

22 网络编程:Go 语言如何通过 RPC 实现跨平台服务

在上一讲中&#xff0c;我为你讲解了 RESTful API 的规范以及实现&#xff0c;并且留了两个作业&#xff0c;它们分别是删除和修改用户&#xff0c;现在我为你讲解这两个作业。 删除一个用户比较简单&#xff0c;它的 API 格式和获取一个用户一样&#xff0c;但是 HTTP 方法换…

java八股-流量封控系统

文章目录 请求后台管理的频率-流量限制流量限制的业务代码UserFlowRiskControlFilter 短链接中台的流量限制CustomBlockHandler 对指定接口限流UserFlowRiskControlConfigurationSentinelRuleConfig 请求后台管理的频率-流量限制 根据登录用户做出控制&#xff0c;比如 x 秒请…

AI给我们生活带来了哪些便利?

在21世纪的科技浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;如同一股不可阻挡的力量&#xff0c;正深刻地改变着我们的生活方式&#xff0c;从日常琐事到复杂决策&#xff0c;无一不渗透着AI的智慧之光。它不仅极大地提升了生活效率&#xff0c;还为我们开启了前所未…

在vue3里使用scss实现简单的换肤功能

实现的换肤功能&#xff1a;主题色切换、亮色模式和暗黑模式切换、背景图切换 主题色就是网站主色&#xff0c;可以配置到组件库上面&#xff1b;亮色模式又分为两种风格&#xff1a;纯白风格和背景图风格&#xff0c;不需要背景图的话可以删掉这部分逻辑和相关定义&#xff1b…

css实现圆周运动效果

在CSS中可以通过 keyframes 动画 和 transform 属性实现元素的圆周运动。以下是一个示例代码&#xff1a; 示例代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content…

Python subprocess.run 使用注意事项,避免出现list index out of range

在执行iOS UI 自动化专项测试的时候&#xff0c;在运行第一遍的时候遇到了这样的错误&#xff1a; 2024-12-04 20:22:27 ERROR conftest pytest_runtest_makereport 106 Test test_open_stream.py::TestOpenStream::test_xxx_open_stream[iPhoneX-xxx-1-250] failed with err…

不一样的CSS(4)--icon图标系列之svg

序言 上一节内容我们讲解了如何利用css去画一个五角星&#xff0c;其中包括了使用svg的方法&#xff0c;有些小伙伴们对svg的使用不是很了解&#xff0c;那么本节内容我们主要来讲一下&#xff0c;关于svg标签的的使用。 目录 序言一、svg的介绍二、安装SVG扩展插件三、SVG基…

springSecurity认证流程

Spring Security 是spring家族中的一个安全管理框架。相比于另一个安全框架Shiro&#xff0c;它提供更丰富的功能和社区资源&#xff0c;但也较难上手。所以一般大项目用spring Security&#xff0c;小项目用Shiro。 一般web应用需要认证和授权&#xff0c;这也是spring Secur…

FastAPI解决跨域报错net::ERR_FAILED 200 (OK)

目录 一、跨域问题的本质 二、FastAPI中的CORS处理 1. 安装FastAPI和CORS中间件 2. 配置CORS中间件 3. 运行FastAPI应用 三、解决跨域报错的步骤 四、案例:解决Vue.js与FastAPI的跨域问题 1. Vue.js前端应用 2. FastAPI后端API 3. 配置CORS中间件 4. 运行和测试 五…

react跳转传参的方法

传参 首先下载命令行 npm react-router-dom 然后引入此代码 前面跳转的是页面 后面传的是你需要传的参数接参 引入此方法 useLocation()&#xff1a;这是 react-router-dom 提供的一个钩子&#xff0c;用于获取当前路由的位置对象location.state&#xff1a;这是从其他页面传…

C++(十二)

前言&#xff1a; 本文将进一步讲解C中&#xff0c;条件判断语句以及它是如何运行的以及内部逻辑。 一&#xff0c;if-else,if-else语句。 在if语句中&#xff0c;只能判断两个条件的变量&#xff0c;若想实现判断两个以上条件的变体&#xff0c;就需要使用if-else,if-else语…

【Keil5教程及技巧】耗时一周精心整理万字全网最全Keil5(MDK-ARM)功能详细介绍【建议收藏-细细品尝】

&#x1f48c; 所属专栏&#xff1a;【单片机开发软件技巧】 &#x1f600; 作  者&#xff1a; 于晓超 &#x1f680; 个人简介&#xff1a;嵌入式工程师&#xff0c;专注嵌入式领域基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大家&#xff1…

三菱CNC数采超详细,资料全备教程,后续更新发那科数采教程

三菱数采详细教程 文章目录 三菱数采详细教程一、介绍1.背景2.需要掌握知识3.需要资料①三菱SDK包&#xff1a;A2②三菱com接口文档③C#代码&#xff1a;④VStudio⑤资料存放网盘 二、程序运行1.调试设备①条件②命令 2.运行软件①打开软件②运行程序 三、数据采集1.代码了解2.…

一文了解模式识别顶会ICPR 2024的研究热点与最新趋势

简介 对模式识别研究领域前沿方向的跟踪是提高科研能力和制定科研战略的关键。本文通过图文并茂的方式介绍了ICPR 2024的研究热点与最新趋势&#xff0c;帮助读者了解和跟踪模式识别的前沿研究方向。本推文的作者是黄星宇&#xff0c;审校为邱雪和许东舟。 一、会议介绍 ICPR…

在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践20241208

&#x1f6e0;️ 在 Windows WSL 上部署 Ollama 和大语言模型&#xff1a;从镜像冗余问题看 Docker 最佳实践 ⭐ 引言 随着大语言模型&#xff08;LLM&#xff09;和人工智能技术的迅猛发展&#xff0c;开发者们越来越多地尝试在本地环境中部署模型进行实验。 但部署过程中常…

混合云策略在安全领域受到青睐

Genetec 发布了《2025 年物理安全状况报告》&#xff0c;该报告根据超过 5,600 名该领域领导者&#xff08;其中包括 100 多名来自澳大利亚和新西兰的领导者&#xff09;的回应&#xff0c;揭示了物理安全运营的趋势。 报告发现&#xff0c;澳大利亚和新西兰的组织采用混合云策…

juc并发编程(下)

一些辅助类 减少计数CountDownLatch 设置一个计数器&#xff0c;通过countDown方法进行减1操作&#xff0c;使用await方法等待计数器不大于0&#xff0c;继续执行await方法之后的语句。 当一个或多个线程调用await方法时&#xff0c;这些线程会阻塞 其他线程调用countDown方…

调用matlab用户自定义的function函数时,有多个输出变量只输出第一个变量

很多朋友在使用matlab时&#xff0c;会使用或自己编辑多个function函数&#xff0c;来满足自己对任务处理的要求&#xff0c;但是在调用function函数时&#xff0c;会出现这个问题&#xff1a;调用matlab用户自定义的function函数时&#xff0c;有多个输出变量只输出第一个变量…

计算机毕设-基于springboot的志愿者招募管理系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…