操作系统上机作业--多线程排序

sort.c: 多线程排序

•   主线程创建一个辅助线程
•   主线程使用选择排序算法对数组的前半部分排序
•   辅助线程使用选择排序算法对数组的后半部分排序
•   主线程等待辅助线程运行結束后,使用归并排序算法归并数组的前半部分和后半部分

实现思路:
ARRAY_COUNT存放要进行排序的数字的个数,need_sort_array[ARRAY_COUNT];记录待排序的数字,sorted[ARRAY_COUNT]用来记录归并排序的结果。

副线程通过调用void *worker(void *arg)函数实现对数组的前半部分的排序,采用插入排序实现,主线程,通过worker()函数实现,同样采用插入排序,最后的归并排序通过Merge_array()实现。
实现代码:

#include<stdio.h>
#include<pthread.h>
#include<unistd.h>#define ARRAY_COUNT 10
int need_sort_array[10]={5,7,8,5,24,25,67,33,1,55};
int sorted[10];void *worker(void *arg){int i,j;int tmp;int Min;for(i=0;i<ARRAY_COUNT/2;i++){Min=i;for(j=i+1;j<ARRAY_COUNT/2;j++){if(need_sort_array[Min]>need_sort_array[j])Min=j;}tmp=need_sort_array[i];need_sort_array[i]=need_sort_array[Min];need_sort_array[Min]=tmp;}
}void master(){int i,j;int tmp;int Min;for(i=ARRAY_COUNT/2;i<ARRAY_COUNT;i++){Min=i;for(j=i+1;j<ARRAY_COUNT;j++){if(need_sort_array[Min]>need_sort_array[j])Min=j;}tmp=need_sort_array[i];need_sort_array[i]=need_sort_array[Min];need_sort_array[Min]=tmp;}
}void Merge_Array(){int i=0,j=ARRAY_COUNT/2,k=0;while(i<ARRAY_COUNT/2&&j<ARRAY_COUNT){if(need_sort_array[i]<need_sort_array[j])sorted[k++]=need_sort_array[i++];elsesorted[k++]=need_sort_array[j++];}while(i<ARRAY_COUNT/2)sorted[k++]=need_sort_array[i++];while(j<ARRAY_COUNT)sorted[k++]=need_sort_array[j++];
}void print(int *array){int i;for(i=0;i<ARRAY_COUNT;i++)printf("%d ",array[i]);printf("\n");
}int main(){pthread_t pid;printf("Before sort,need_sort_array: ");print(need_sort_array);pthread_create(&pid,NULL,&worker,NULL);master();pthread_join(pid,NULL);printf("After sorted,need_sort_array: ");print(need_sort_array);Merge_Array();printf("sorted array: ");print(sorted);return 0;
}

这里写图片描述
欢迎留言交流。。。

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

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

相关文章

jdk5下载链接

查看jdk版本 java -versionJDK下载 最新版本http://www.oracle.com/technetwork/java/javase/downloads/index.htmlJDK下载 版本1.5.22http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase5-419410.html#jdk-1.5.0_22-oth-JPR JDK…

html的细节优化,网站页面优化细节详解

原标题&#xff1a;网站页面优化细节详解SEO页面优化是继SEO结构优化之后&#xff0c;另一个重要优化地方;页面标题在每个页面中的关键位置&#xff0c;出现目标关键词&#xff0c;这是我们做页面优化的基础思路&#xff0c;关键词位置&#xff0c;都有哪些呢?第一个是关键位置…

操作系统上机作业--使用条件变量解决生产者、计算者、消费者问题(多线程)

pc1.c: 使用条件变量解决生产者、计算者、消费者问题 /* • 系统中有3个线程&#xff1a;生产者、计算者、消费者 • 系统中有2个容量为4的缓冲区&#xff1a;buffer1、buffer2 • 生产者生产a、b、c、‘d、e、f、g、h八个字符&#xff0c;放入到buffer1 • 计算者从b…

程序各个段text,data,bss,stack,heap

网上找了一堆资料学习一下,了解这些, 有助于规化程序结构,优化代码; 使用gcc编译出来的程序,用size可以查看程序结构和大小, 如 1: #size hello 2: Text data bss dec hex filename 3: 778 200 4 982 3D6 hello 所以一个可执行的程序文件,结构分三部分: .text 代码段,用来存…

操作系统上机作业-- 使用信号量解决生产者、计算者、消费者问题(多线程)

pc2.c: 使用信号量解决生产者、计算者、消费者问题 • 功能和前面的实验相同&#xff0c;使用信号量解决 实现思路: 生产者、计算者、消费者三者之间的关系和上一个编程任务一样&#xff0c;不一样的是&#xff0c;将互斥量、条件变量封装起来作为信号量&#xff0c;处理方…

Singleton 单件

模式分类 从目的来看&#xff1a; -创建型&#xff08;Creational&#xff09;模式&#xff1a;负责对象创建 -结构型&#xff08;Structural&#xff09;模式&#xff1a;处理类与对象间的组合 -行为型&#xff08;Behavioral&#xff09;模式&#xff1a;类与对象交互中的职责…

10个利用Eclipse调试Java的常见技巧

http://www.open-open.com/news/view/1ad9099 阅读目录 1. Conditional Breakpoint2. Exception Breakpoint3. Watch Point4. Evaluation (Display or Inspect or Watch)5. Change Variable Values6. Stop in Main7. Environment Variables8. Drop to Frame9. Step Filter10. S…

操作系统上机作业--创建N个线程(多线程)

ring.c: 创建N个线程&#xff0c;它们构成一个环 • 创建N个线程&#xff1a;T1、T2、T3、… TN • T1向T2发送整数1 • T2收到后将整数加1 • T2向T3发送整数2 • T3收到后将整数加1 • T3向T4发送整数3 • … • TN收到后将整数加1 • TN向T1发送整数N 实…

台式计算机网线,台式电脑如何连接宽带_台式电脑如何连接网线

2017-03-11 21:36:28电脑直接拨号上网(有宽带账号和密码)或者自动获取IP(有帐号没密码)上方式设置见图2016-12-10 13:29:30右击网上邻居&#xff0c;点属性&#xff0c;创建一个新的连接&#xff0c;按照下一步下一步的步骤就可以了&#xff0c;然后成功之后输入你的宽带号码和…

栈的应用--汉诺塔

#include<stdio.h>void move(char x,int n,char y){printf("%d号盘 %c柱 ---> %c柱\n",n,x,y); }void hanoi(int n,char x,char y,char z){if(n1){move(x,1,z);}else{hanoi(n-1,x,z,y);move(x,n,z);hanoi(n-1,y,x,z);} }int main(){int n;char xX;char yY;c…

凭据不工作

最悲催的事情是什么&#xff1f;那就是你可以远程别人的电脑&#xff0c;但是别人不能远程自己的电脑&#xff01; 背景&#xff1a; 换了个win8.1的系统&#xff0c;刚开始可以远程上,过了几天,电脑突然不能远程了,让我很是郁闷呀. 于是在网上查了好多资料,看看他到底是什么原…

计算机专业女兵,陈豪2010《点解阿Sir》剧照

0陈豪2010《点解阿Sir》剧照2012-07-21 08:24{"info": {"setname": "陈豪2010《点解阿Sir》剧照","imgsum_bk": 20,"imgsum": 20,"lmodify": "2012-07-21 08:24:00","prevue": " "…

ASP.NET MVC学习之Ajax(完结)

一.前言 通过上面的一番学习&#xff0c;大家一定收获不少。但是总归会有一个结束的时候&#xff0c;但是这个结束也意味着新的开始。 如果你是从事ASP.NET开发&#xff0c;并且也使用了第三方控件&#xff0c;那么一定会觉得ASP.NET开发ajax十分的简单&#xff0c;而ASP.NET M…

认知计算机语言学,什么是认知语言学

文献综述&#xff1a;“语文素养”内涵研究综述“语文素养”内涵研究综述摘要&#xff1a;“语文素养”是新一轮语文课程改革所提出的一个重要概念&#xff0c;其作为语文课程改革的目标与核心理念&#xff0c;挤兑了“语文能力”的核心地位。目前&#xff0c;人们对“语文素养…

大学新生学计算机推荐电脑,大学新生用什么电脑好呢?

科技的发展日新月异&#xff0c;数码的yi巴为你资讯。今天是7月的开头&#xff0c;我们正式迈入了2019下半年。7月开头也正是许多大多数高考生快忙完志愿填报&#xff0c;开始考虑大学该选择什么电脑的时候。今天yi巴就来跟大家聊聊该大学新生该怎么选择电脑&#xff0c;并给予…

Android,监控ContentProvider的数据改变

有时候应用中需要监听ContentProvider的改变并提供响应&#xff0c;这时候就要利用ContentObserver类了 不管是ContentProvider中实现的,insert,delete,update方法中的任何一个&#xff0c;程序都会调用getContext().getContentResolver().notifyChange(uri,null); 这行代码可用…

插件开发-UI插件开发

1.新建类库解决方案&#xff0c;引入命名空间,同时引入要添加UI Form的WebPart(在Portal\UILib目录下)2.继续UFSoft.UBF.UI.Custom.ExtendedPartBase&#xff0c;重写AfterInit()方法&#xff0c;代码如下&#xff0c;便于添加下拉列表按钮&#xff0c;在原单据中UI先新增一下拉…

为博客园选择一个小巧霸气的语法高亮插件

博客园的语法高亮简直蛋疼&#xff0c;于是乎就打算找一个靠谱的插件来改造下。各种百度谷歌&#xff0c;大致得到几个推荐&#xff1a;SyntaxHighlighter&#xff0c;Snippet&#xff0c;Google Code Pretiffy&#xff0c;Highlight&#xff0c;SHJS。其实 SyntaxHighlighter …

PS图片删除需要计算机管理权限,如何使用PsTools工具执行本地/远程PC管理任务

大多数刚入门的管理员都习惯使用 RDP 或其它类似的工具连接到远程 Windows 中进行图形化管理。而 PowerShell 及 PsTools 等工具可以帮助我们在命令行中执行相当多的管理任务&#xff0c;更主要的是可以将其写成脚本来执行周期性重复任务或在管理大批量服务器时提高效率。在企业…

Python实验:关灯游戏

文章目录 前言一、设计表二、关键代码三、运行结果小地图&#xff0c;容易难度&#xff1a;中地图&#xff0c;中等难度&#xff1a;大地图&#xff0c;困难难度&#xff1a; 四、完整代码链接总结 前言 这是一个Python实验作业&#xff0c;内容如下&#xff1a; 题目要求&am…