首页 > 编程知识 正文

c语言中的/和%表示什么意思,北京奔驰c200

时间:2023-05-05 08:00:43 阅读:31155 作者:502

目录仿真内容仿真思路实现方法编程实现执行结果

下载源代码

仿真内容1、实现经典生产者消费者问题的仿真,以便更好地理解这个经典过程同步问题。 生产者-消费者问题是有名的过程同步问题。 这是一群生产者向一群消费者提供产品,它们共享有界缓冲池,生产者的任务是将产品投入其中,消费者从中获取产品。

2、假设生产者和消费者相互等价,缓冲池不满,生产者可以将生产的产品放入其中; 如果缓冲池不空,消费者可以从缓冲池中提取产品。

3、生产者消费者流程同步。 因为只有通过信息交流才能知道是否可以存入产品,或者是否可以取产品。 如果他们之间也有互相排他性,并且缓冲池被占用,则任何进程都无法访问。 也就是说,生产者、消费者必须互斥地访问缓冲池。

仿真思路1、随机产生并显示每个生产者生产一个产品的时间和每个消费者消费一个产品的时间。

2、随着时间的推移,体现生产者生产一个产品的过程和消费者消费一个产品的过程,统计生产的产品总数和消费的产品总数。

3、限制缓冲池中缓冲区的容量。 例如,只能容纳n个产品。 当缓冲池充满时,必须能够表现生产者正在等待的状况,当缓冲池空闲时,必须能够表示消费者正在等待。

实现方法是使用random类对象产生随机数,随机生成生产者和消费者的生产和消耗时间,使用线程的sleep函数,使当前运行的线程挂起生产者或消费者的生产或消耗的过程,使c#表单的timer计时器拷贝

编程可以初始化一些全局变量,包括随机生成的生产时间和消耗时间、生产总数、消耗总数、循环队列左右指针和互斥量。

公共表单1 ((初始化组件); Random ra=new Random (; timep=ra.next (1,10 ); //随机发生1-10的生产时间timec=ra.next (1,10 ); //随机发生的1-10消耗时间this.lbptime.Text='单位生产时间: " timep.ToString () ) )、秒); this.lbctime.Text='单位消耗时间: (“timec.ToString () ) )、秒); } int countp=0; //生产总值int countc=0; //消费总数int left=0; //左指针int right=0; //右指针int timep=0; //生产时间int timec=0; //消耗时间int mutex=1; //互斥量int empty=5; //空闲缓冲区的数量int full=0; //有产品的缓冲区数量消费者线程

void consumer () if ) full0) if ) mutex==1) { mutex=0; this.LBM.text=' mutex : ' mutex.tostring (; consume (左; left=(left 1) % 5; 计数; this.lbc.Text='消费总数: ' countc.ToString (; 完全- -; 空泡; this.lbf.text=' full : ' full.tostring (; this.lbe.text=' empty : ' empty.tostring (; mutex=1; this.LBM.text=' mutex : ' mutex.tostring (; } else { this.lbts1.Text='缓冲区已被占用。 请稍等. '; } } else { this.lbts1.Text='缓冲区为空,无法使用。 请稍等. '; }生产者线程函数。

void productor () if ) empty0) /判断缓冲区是否已满(if ) mutex==1) ) { mutex=0; this.LBM.text=' mutex : ' mutex.tostring (; 产品(轻型); //调用方法生产商品right=(right1) % 5; 计数; //

统计生产个数 this.lbp.Text = "生产总数:" + countp.ToString(); empty--; full++; this.lbf.Text = "full:" + full.ToString(); this.lbe.Text = "empty:" + empty.ToString(); mutex = 1; this.lbm.Text = "mutex:" + mutex.ToString(); } else { this.lbts1.Text = "缓冲区已被占用,请等待...."; } } else { this.lbts1.Text = "缓冲区已满,不能生产,请等待...."; }}

编写函数用于修改消费者消费指定的缓存区的颜色并维持指定的时间。

public void consume(int index) { Form1 f = new Form1(); switch (index) { case 0: this.b1.BackColor = Color.Red; Thread.Sleep(timec * 1000); this.b1.BackColor = Color.White; this.lbts1.Text = "就绪!"; break; case 1: this.b2.BackColor = Color.Red; Thread.Sleep(timec * 1000); this.b2.BackColor = Color.White; this.lbts1.Text = "就绪!"; break; case 2: this.b3.BackColor = Color.Red; Thread.Sleep(timec * 1000); this.b3.BackColor = Color.White; this.lbts1.Text = "就绪!"; break; case 3: this.b4.BackColor = Color.Red; Thread.Sleep(timec * 1000); this.b4.BackColor = Color.White; this.lbts1.Text = "就绪!"; break; case 4: this.b5.BackColor = Color.Red; Thread.Sleep(timec * 1000); this.b5.BackColor = Color.White; this.lbts1.Text = "就绪!"; break; } }

编写函数用于修改生产者生产对应的缓存区的颜色并维持指定的时间。

public void product(int index) { Form1 f = new Form1(); switch (index) { case 0: this.b1.BackColor = Color.Red; Thread.Sleep(timep * 1000); this.b1.BackColor = Color.LawnGreen; this.lbts1.Text = "就绪!"; break; case 1: this.b2.BackColor = Color.Red; Thread.Sleep(timep * 1000); this.b2.BackColor = Color.LawnGreen; this.lbts1.Text = "就绪!"; break; case 2: this.b3.BackColor = Color.Red; Thread.Sleep(timep * 1000); this.b3.BackColor = Color.LawnGreen; this.lbts1.Text = "就绪!"; break; case 3: this.b4.BackColor = Color.Red; Thread.Sleep(timep * 1000); this.b4.BackColor = Color.LawnGreen; this.lbts1.Text = "就绪!"; break; case 4: this.b5.BackColor = Color.Red; Thread.Sleep(timep * 1000); this.b5.BackColor = Color.LawnGreen; this.lbts1.Text = "就绪!"; break; } }

生产按钮对应的后台代码,创建线程调用对应的线程函数。

private void button6_Click(object sender, EventArgs e){ Thread t = new Thread(new ThreadStart(productor)); t.Start();}

消费按钮对应的后台代码,创建线程调用对应的线程函数。

private void button7_Click(object sender, EventArgs e) { Thread t = new Thread(new ThreadStart(this.consumer)); t.Start(); }

通过C#中的timer控价实现在窗体中动态显示系统时间。

private void Form1_Load(object sender, EventArgs e) //首先在主窗体添加定时事件 { this.timer1.Interval = 1000;//设置定时器触发间隔 this.timer1.Start(); //启动定时器 this.lbtime.Text = DateTime.Now.ToString(); System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; } private void timer1_Tick(object sender, EventArgs e) //接着在定时器触发事件中添加获取时间和显示时间函数 { DateTime time = DateTime.Now; //获取当前时间 lbtime.Font = new Font("宋体", 15); //设置label1显示字体 this.lbtime.Text = time.ToString(); //显示当前时间 } 运行结果

进入系统的初始页面如图所示。


在初始页面点击生产,缓冲区变为红色表示生产者正在生产,如图所示,一段时间后缓冲区变为绿色表示生产完成,如图所示。



当缓冲区为空时点击消费按钮系统提示缓冲区为空,不能消费,请等待,如图所示。

当缓冲区已满时点击生产按钮系统提示缓冲区已满,不能生产,请等待,如图所示。

当生产处于生产的过程中时点击消费或消费者在消费时点击生产系统提示缓冲区已被占用,请等待,如图所示。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。