windows系统下c语言编程设置缓冲区并设置信号灯保护,操作系统实验1~9.doc

操作系统实验1~9

实验一进程同步和互斥

(建议4学时)

一、实验目的

1.掌握临界资源、临界区概念及并发进程互斥、同步访问原理。

2.学会使用高级语言进行多线程编程的方法。

3.掌握利用VC++或Java语言线程库实现线程的互斥、条件竞争,并编码实现P、操作,利用P、V操作实现两个并发线程对有界临界区的同步访问。

4.通过该实验,学生可在源代码级完成进程同步互斥方案的分析、功能设计、编程实现,控制进程间的同步、互斥关系。

二、实验要求

1.知识基础:学生应在完成进程和线程及调度等章节的学习后进行。

2.开发环境与工具:

硬件平台——个人计算机。

软件平台-Windows操作系统,vc++语言或Java语言开发环境。

3.运用高级语言VC++或Java语言线程库及多线程编程技术进行设计实现。

三、实验内容

1.实现临界资源、临界区、进程或线程的定义与创建。

2.利用两个并发运行的进程,实现互斥算法和有界缓冲区同步算法。

四、实验方案指导

该实验方案由以下几个关键设计项目组成:

1.并发访问出错。即设计一个共享资源,创建两个并发线程,二者并发访问该共享资 源。当没有采用同步算法设计时,线程所要完成的某些操作会丢失。

2.互斥锁。并发线程使用线程库提供的互斥锁,对共享资源进行访问。

3.软件方法。设计并编程实现计数信号量、P操作函数、V操作函数,并发线程通过调用P,V操作函数实现线程的互斥。

4.同步访问多缓冲区。利用上面的软件方法完成P,V操作,可实现两个线程对多缓冲区的同步访问。

五、实验方案实现范例

以下是对该项目中包含的部分设计功能的实现方法、实现过程、技术手段的描述,供师生参考。

1.模拟线程并发运行。

假设我们使用POSIX线程库,而POSIX并没有真正提供线程间的并发运行需求。我们设计的系统应支持符合RR调度策略的并发线程,每个线程运行一段时间后自动挂起,另一 个线程开始运行。这样一个进程内所有线程以不确定的速度并发执行。

2.模拟一个竞争条件——全局变量。

创建两个线程tl和t2,父线程主函数main()定义两个全局变量accntl和accnt2,每个变 量表示一个银行账户,初始化为0。每个线程模拟一个银行事务:将一定数额的资金从一个 账户转到另一个账户。每个线程读入一个随机值,代表资金数额,在一个账户上做减法,在 另一个账户上做加法,用两个变量记录两个账户的收支情况。良性情况下收支应平衡,即两 个全局变量之和应为0。

下面是每个线程的代码:counter=0;

do{

tmp1=accnt1;

tmp2=accnt2;

r=random();

accnt1=tmp1+r;

accnt2=tmp2-r;

counter++;

}while(accnt1+accnt2==0);

printf(”%d”,counter);

=====================================================================

两个线程运行的代码相同,只要各自代码不被交叉执行,两个收支余额之和就应一直为 如果线程被交叉执行,某个线程可能会读入一个旧的accntl值和一个新的accnt2值,或 反,这样会导致某个值的丢失。当这种情况出现时,线程停止运行,并把出现情况的位置 Counter的值)打印出来。

3.模拟一个竞争条件——共享文件。

主线程创建两个共享文件fl和f2,每个文件包含一个当前银行账户。线程使用随机数对件进行读/写,方式同上。注意:文件在读/写过程中不要加互斥访问锁,以免不会出现交叉访问的情况。

4.测试出现一个竞争条件的时间。

我们的编程环境中,一般无法支持线程的RR调度,必须编程实现两个线程间在两个赋值语句之间插入以下代码:在指定区间(比如0到1)生成一个随机数,小于一个极限值(如0.1),调用线程自动挂起函数jield(),自动放弃CPU,另一运行,于是导致一个数据更新的丢失。

5.互斥锁。

POSIX线程库提供一个二值信号量,称为MUTEX,它可以加锁或解锁。如一个线程加上锁的MUTEX加锁,就会引发该线程被阻塞,MUTEX解锁时唤醒它些原语,很容易实现互斥进入CS(临界区)。进入CS区时加锁,离开CS区时

6.用软件方法实现互斥访问临界区。

用标准编程语言设置变量的值,用线程“忙等待”实现互斥访问CS。设计两线分代码如下:

int cl=0,c2=0,will_wait;

p1:while(l) {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值