上机实验7讲课教案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上机实验7
攀枝花学院实验报告
实验课程: Visual C#,NET程序设计实验项目: 上机实验9
实验日期:2015年6月2日
系:数学与计算机学院班级: 2013级计算机科学与技术姓名: 学号: 同组人: 指导教师:罗明刚成绩:
实验仪器设备,药品,器材:Microsoft visual studio 2010
实验原理:
1.熟悉visual 2010的基本操作方法.
1.认真阅读本章相关内容,尤其是案例.
2.实验前进行程序设计,完成源程序的编写任务.
3.反复操作,直到不需要参考教材,能熟练操作为止.
实验内容:
1.要求创建一个银行账户类,一个银行客户类,客户类有账户,从银行客户类派生出儿子
和父亲,分别对应的操作为存款和取款。在主程序中创建两个辅助线程,将存款取款操作分给辅助线程,观察两个线程并发操作的结果并分析。
2.在实验1 的基础上,采用lock对存款取款进行操作,分析多个线程运行的结果,并分析存在的问题并说明原因。
3.在实验2的基础上,对两个主线程同步,实现父亲存款后儿子取款,父亲再存款儿子再取款的操作,观察实验结果并分析原理。
ing 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 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 <= banlance)
{
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("存钱成功: {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 acc)
: 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 System.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 ParameterizedThreadStart(SonProc));
threadSon.Start(r);
Thread threadFather = new Thread(new ParameterizedThreadStart(FatherProc));
threadFather.Start(r);
}
public static void FatherProc(object obj)