222019321062060_付若轩20

preview
需积分: 0 0 下载量 34 浏览量 更新于2022-08-08 收藏 1.08MB DOCX 举报
在本实验报告中,学生付若轩(222019321062060)探讨了操作系统原理课程中的线程库Pthread以及并发编程技术。实验发生在2020-2021学年的第二个学期,软件工程专业,由赵恒军老师指导。实验的主要目标是掌握Pthread API用于线程创建和终止的操作,以及并发编程技巧。 **1. Pthread API与并发编程** Pthread库是POSIX线程接口,它为C语言提供了一种标准的方式来创建和管理线程。在Linux环境下,Pthread库被广泛使用。关键的API包括: - `pthread_create()`: 创建新线程。 - `pthread_join()`: 等待一个线程结束并回收其资源。 - `pthread_exit()`: 结束当前线程并返回一个退出状态。 - `pthread_self()`: 获取当前线程的ID。 - `pthread_mutex_t`: 互斥锁,用于同步对共享资源的访问。 并发编程涉及多个执行流同时运行,这需要考虑线程间的同步和通信以避免数据竞争和死锁。 **2. 实验环境** 实验在Virtualbox上使用Ubuntu或其他Linux系统组合进行。Virtualbox是一款虚拟机软件,允许在主机操作系统上运行客体操作系统。 **3. 实验内容与设计** **任务1**:创建主线程并在其中创建新线程,将两个整数传递给新线程,由新线程计算它们的和。这里采用了指针传递数组来实现数据交换。 **任务2**:定义长度为200000的整数数组,随机初始化后对其进行排序,并测量时间成本。使用`time`命令来度量执行时间。 **任务3**:编写C程序合并两个已排序的整数数组成一个单个排序数组。这涉及到线性搜索或二分查找等算法。 **任务4**:编写多线程排序程序,设置虚拟机至少2个CPU,定义两个全局整数数组a和b,长度均为200000。在主线程中,创建两个新线程分别对数组a的前半部分和后半部分进行排序。主线程等待这两个新线程结束,然后将排序后的两部分合并到数组b中。比较多线程程序的时间成本与任务2中的时间,计算加速比。 **源代码与步骤** 任务1的代码可能包括创建新线程的`pthread_create()`调用,以及在新线程中计算和的函数。 任务2的代码需要实现一个自定义排序函数,如快速排序、归并排序或冒泡排序,并在外部使用`time`命令来测量执行时间。 任务3的代码会包含一个合并排序数组的函数,可能使用双指针技术来实现。 任务4的代码需要初始化数组,创建线程,使用`pthread_join()`等待线程结束,以及合并排序结果的逻辑。此外,还需要使用`time`命令来比较时间成本。 通过这些实验,学生能够深入理解线程的创建、同步、通信以及并发执行对性能的影响,这些都是操作系统和多核编程的关键概念。
身份认证 购VIP最低享 7 折!
30元优惠券
7323
  • 粉丝: 29
  • 资源: 327
上传资源 快速赚钱
voice
center-task 前往需求广场,查看用户热搜

最新资源