《上机实验7(6页).doc》由会员分享,可在线阅读,更多相关《上机实验7(6页).doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-上机实验7-第 6 页攀枝花学院实验报告实验课程: Visual C#,NET程序设计 实验项目: 上机实验9实验日期:2015年6月2日 系:数学与计算机学院 班级: 2013级计算机科学与技术 姓名: 学号: 同组人: 指导教师:罗明刚 成绩: 实验仪器设备,药品,器材:Microsoft visual studio 2010实验原理:1.熟悉visual 2010的基本操作方法.1. 认真阅读本章相关内容,尤其是案例.2. 实验前进行程序设计,完成源程序的编写任务.3. 反复操作,直到不需要参考教材,能熟练操作为止.实验内容:1.要求创建一个银行账户类,一个银行客户类,客户类有账户,从
2、银行客户类派生出儿子和父亲,分别对应的操作为存款和取款 。在主程序中创建两个辅助线程,将存款取款操作分给辅助线程,观察两个线程并发操作的结果并分析。2.在实验1的基础上,采用lock对存款取款进行操作,分析多个线程运行的结果,并分析存在的问题并说明原因。3.在实验2的基础上,对两个主线程同步,实现父亲存款后儿子取款,父亲再存款儿子再取款的操作,观察实验结果并分析原理。1.using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespac
3、e BankAccount public class Account private int banlance; private object obj = new object(); private bool flag = false; public int Banlance get return banlance; public Account(int banlance) this.banlance = banlance; public void Withdraw(int money) if (flag = false) Monitor.Wait(obj); if (money = banl
4、ance) banlance -= money; Console.WriteLine(string.Format(取钱成功: 0 , 余额为: 1, money, banlance); else Console.WriteLine(string.Format(取钱失败: 余额不足); flag = false; Monitor.Pulse(obj); public void Deposit(int money) if (flag = true) Monitor.Wait(obj); banlance += money; Console.WriteLine(string.Format(存钱成功:
5、 0 is deposited, 余额为:1, money, banlance); flag = true; Monitor.Pulse(obj); public abstract class Customer protected Account acc; public Account Acc get return acc; public Customer(Account acc) this.acc = acc; public abstract void DoTransact(int money); public class Son:Customer public Son(Account ac
6、c) : base(acc) public override void DoTransact(int money) acc.Withdraw(money); public class Father : Customer public Father(Account acc):base(acc) public override void DoTransact(int money) acc.Deposit(money);using System;using System.Collections.Generic;using System.Linq;using System.Text;using Sys
7、tem.Threading;namespace BankAccount class Program public static Son son; public static Father father; public static Random r = new Random(); static void Main(string args) Account acc = new Account(0); son = new Son(acc); father = new Father(acc); Thread threadSon = new Thread(new ParameterizedThread
8、Start(SonProc); threadSon.Start(r); Thread threadFather = new Thread(new ParameterizedThreadStart(FatherProc); threadFather.Start(r); public static void FatherProc(object obj) Random r = (Random)obj; for (int i = 0; i 20; i+) father.DoTransact(r.Next(0, 1000); public static void SonProc(object obj)
9、Random r = (Random)obj; for (int i = 0; i 20; i+) son.DoTransact(r.Next(0, 1000);实验截图:2.using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace BankAccount public class Account private int banlance; private object obj = new object(); private
10、 bool flag = false; public int Banlance get return banlance; public Account(int banlance) this.banlance = banlance; public void Withdraw(int money) lock (obj) if (flag = false) Monitor.Wait(obj); if (money = banlance) banlance -= money; Console.WriteLine(string.Format(取钱成功: 0 , 余额为: 1, money, banlan
11、ce); else Console.WriteLine(string.Format(取钱失败: 余额不足); flag = false; Monitor.Pulse(obj); public void Deposit(int money) lock (obj) if (flag = true) Monitor.Wait(obj); banlance += money; Console.WriteLine(string.Format(存钱成功: 0 is deposited, 余额为:1, money, banlance); flag = true; Monitor.Pulse(obj); pu
12、blic abstract class Customer protected Account acc; public Account Acc get return acc; public Customer(Account acc) this.acc = acc; public abstract void DoTransact(int money); public class Son:Customer public Son(Account acc) : base(acc) public override void DoTransact(int money) acc.Withdraw(money)
13、; public class Father : Customer public Father(Account acc):base(acc) public override void DoTransact(int money) acc.Deposit(money);using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace BankAccount class Program public static Son son; publ
14、ic static Father father; public static Random r = new Random(); static void Main(string args) Account acc = new Account(0); son = new Son(acc); father = new Father(acc); Thread threadSon = new Thread(new ParameterizedThreadStart(SonProc); threadSon.Start(r); Thread threadFather = new Thread(new Para
15、meterizedThreadStart(FatherProc); threadFather.Start(r); public static void FatherProc(object obj) Random r = (Random)obj; for (int i = 0; i 20; i+) father.DoTransact(r.Next(0, 1000); public static void SonProc(object obj) Random r = (Random)obj; for (int i = 0; i 20; i+) son.DoTransact(r.Next(0, 1000);3. 实验总结 此次实验算是C#的最后一次实验了吧,此次实验没有线程难,但是也包括了线程的相关知识,主要还是操作了之前操作的类的相关知识,所以在老师讲的时候大部分也能够听得懂,这学期的C#实验就要告一段落了,自己总结了一下这学期C#的学习,没有人比我更了解自己,就是觉得自己上理论课的时候呢计算老是开小差,但是上实验课的时候都认真的去做,遇到不会的就自己去网上找资料自己解决,除了有些像线程那样的难点,其他的几次实验算是都是自己去完成的.不管怎么样,希望自己不管在学习还是工作中都能以积极认真的态度去对待,这样对谁都好.
限制150内