admin 管理员组

文章数量: 887021


2024年1月13日发(作者:选项卡式布局)

操作系统多线程并发实验心得

一、实验背景和目的

操作系统是计算机系统中最基础的软件之一,它负责管理计算机硬件资源,为应用程序提供必要的服务。多线程并发是操作系统中一个重要的概念,它能够提高计算机系统的效率和性能。本次实验旨在通过编写多线程并发程序,加深对操作系统多线程并发原理的理解,并掌握相关技术。

二、实验环境和工具

本次实验使用的操作系统是 Windows 10,开发工具是 Visual Studio

2019。

三、实验内容和步骤

1. 实验一:创建多线程并发程序

首先,我们需要创建一个多线程并发程序。具体步骤如下:

(1)打开 Visual Studio 2019,选择“新建项目”,选择

“Windows 控制台应用程序”。

(2)在“解决方案资源管理器”中右键单击“源文件”,选择“添加”

-> “新建项”,创建一个名为“”的源文件。

(3)在 中编写代码。代码如下:

#include

#include

#include

using namespace std;

void threadFunc(int id)

{

for (int i = 0; i < 5; i++)

{

cout << "Thread " << id << " " << endl;

this_thread::sleep_for(chrono::seconds(1));

}

}

int main()

{

thread t1(threadFunc, 1);

thread t2(threadFunc, 2);

();

();

return 0;

}

(4)编译并运行程序。可以看到两个线程交替执行,每个线程输出五次。

2. 实验二:使用互斥锁保护共享资源

在多线程并发程序中,如果多个线程同时访问同一个共享资源,就会出现数据竞争的问题。为了避免这种情况,我们需要使用互斥锁来保护共享资源。具体步骤如下:

(1)修改 中的代码,在 threadFunc 函数中添加互斥锁。

#include

#include

#include

#include

using namespace std;

mutex mtx;

void threadFunc(int id)

{

for (int i = 0; i < 5; i++)

{

();

cout << "Thread " << id << " " << endl;

();

this_thread::sleep_for(chrono::seconds(1));

}

}

int main()

{

thread t1(threadFunc, 1);

thread t2(threadFunc, 2);

();

();

return 0;

}

(2)编译并运行程序。可以看到两个线程交替执行,并且输出的结果不会出现混乱。

3. 实验三:使用条件变量实现线程同步

除了互斥锁之外,还有一种常用的同步机制是条件变量。条件变量可以让线程在特定条件下等待,直到其他线程发出通知。具体步骤如下:

(1)修改 中的代码,在 threadFunc 函数中添加条件变量。

#include

#include

#include

#include

#include

using namespace std;

mutex mtx;

condition_variable cv;

void threadFunc(int id)

{

for (int i = 0; i < 5; i++)

{

unique_lock lck(mtx);

cout << "Thread " << id << " " << endl;

_all();

(lck);

}

}

int main()

{

thread t1(threadFunc, 1);

thread t2(threadFunc, 2);

();

();

return 0;

}

(2)编译并运行程序。可以看到两个线程交替执行,并且输出的结果不会出现混乱。

四、实验总结

通过本次实验,我深入了解了操作系统多线程并发的原理和相关技术,掌握了创建多线程并发程序、使用互斥锁保护共享资源和使用条件变量实现线程同步的方法。同时,我也意识到多线程并发程序中可能会出现数据竞争等问题,需要采取相应的措施来避免这些问题的出现。在今后的学习和工作中,我将继续深入研究操作系统多线程并发的相关知识,为提高计算机系统的效率和性能做出贡献。


本文标签: 实验 线程 使用 并发