- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统_线程的同步与互斥
操作系统实验报告
实验名称: 线程的同步与互斥
专业班级: 网络工程 1301
学 号:
姓 名:
2015 年 4 月 7 日
实验二 线程的同步与互斥
实验目的
1、掌握程序中线程的操作。
2、熟悉线程不同步时的现象及环境因素。
3、掌握线程中同步和互斥对象的使用。
二、实验内容与步骤
1.多线程访问共享变量(互斥)
(1) 定义类变量 int i = 0; 初始值置为 0,创建两个线程,一个对 i 执行加 1 操作,另一个对 i 执行减 1 操作。两个线程执行相同的次数。
(2)观察两个线程执行后的情况,可以发觉最后 i 的值不一定是 0,这就是多个线程在操作一个共享变量 i时,未互斥访问带来的严重问题。
(3)给这两个线程加上互斥操作的代码,再来观察对 i 值的影响。
添加互斥操作前
添加互斥操作后
2.通过多线程模拟“生产者—消费者”问题(同步)
(1)定义一个数组用来模拟共享缓冲区,定义一个生产者线程和一个消费者线程来实现对数组进行读写。
(2)观察两个线程执行后的情况,看会不会出现读取数据重复和写入数据覆盖的情况,加入两步操作后再观察结果如何。
(3)创建多个生产者线程和消费者线程,再查看运行结果。
添加互斥操作前
添加互斥操作后
四、实验总结
通过本次实验进一步熟悉了程序中线程的操作和线程中同步和互斥对象的使用,基本上理解了计算机系统中资源冲突的解决方法,也理解了线程不同步时的现象及环境因素,学会怎样使用系统和程序中资源冲突的方法,并且进一步了解了操作系统内部的知识,拓宽了我的视野和能力!
五、程序清单
1.多线程访问共享变量(互斥)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace AddSub
{
class Program
{
static void Main(string[] args)
{
AddAndSub ass = new AddAndSub();
Thread add_Td = new Thread(ass.getAdd);
Thread sub_Td = new Thread(ass.setSub);
add_Td.Start();
sub_Td.Start();
add_Td.Join();
sub_Td.Join();
Console.WriteLine(最终结果:--+ass.num);
Console.Read();
}
}
public class AddAndSub
{
public int num = 0;
public AddAndSub()
{ }
public void getAdd()
{
lock (this)
{
int i = 1000000;
while (i != 0)
{
num++;
i--;
}
}
}
public void setSub()
{
lock (this)
{
int j = 1000000;
while (j != 0)
{
num--;
j--;
}
}
}
}
}
2.通过多线程模拟“生产者—消费者”问题(同步)
using System;
using System.Collections.Generic;
using System.Linq;
文档评论(0)