C#多线程经典示例(吃苹果)多线程经典示例(吃苹果)
本文主要讲述了多线程开发中经典示例,通过本示例,可以加深对多线程的理解。下面跟着小编一起来看下吧
本文主要讲述了多线程开发中经典示例,通过本示例,可以加深对多线程的理解。
示例概述:示例概述:
下面用一个模拟吃苹果的实例,说明C#中多线程的实现方法。要求开发一个程序实现如下情况:一个家庭有三个孩子,爸爸妈妈不断削苹果
往盘子里面放,老大、老二、老三不断从盘子里面取苹果吃。盘子的大小有限,最多只能放5个苹果,并且爸妈不能同时往盘子里面放苹果,
妈妈具有优先权。三个孩子取苹果时,盘子不能为空,三人不能同时取,老三优先权最高,老大最低。老大吃的最快,取的频率最高,老二
次之。
涉及到知识点:涉及到知识点:
线程Thread 创建并控制线程,设置其优先级并获取其状态。
锁 lock 用于实现多线程同步的最直接办法就是加锁,它可以把一段代码定义为互斥段,在一个时刻内只允许一个线程进入执行,而其他
线程必须等待。
事件EventHandler 声明一个事件,用于通知界面做改变
设计思路:设计思路:
Productor 表示生产者,用于削苹果。
Consumer 表示消费者,用于吃苹果。
Dish 盘子,用于装苹果,做为中间类
EatAppleSmp 的BeginEat()方法,表示开始吃苹果,启动线程
效果图如下【爸爸妈妈削苹果,孩子吃苹果】:
后台输出如下:
Mama放1个苹果
Baba放1个苹果
Dage取苹果吃...
Erdi取苹果吃...
Sandi等待取苹果
Mama放1个苹果
Sandi取苹果吃...
Baba放1个苹果
Dage取苹果吃...
Mama放1个苹果
Baba放1个苹果
Erdi取苹果吃...
Mama放1个苹果
Baba放1个苹果
Dage取苹果吃...
Sandi取苹果吃...
Mama放1个苹果
Baba放1个苹果
Erdi取苹果吃...
Mama放1个苹果
Baba放1个苹果
Dage取苹果吃...
Mama放1个苹果
Baba放1个苹果
Sandi取苹果吃...
Mama放1个苹果
Baba正在等待放入苹果
Erdi取苹果吃...