From 48d4332608158a820b14f115f4e68ab3b0a6f1ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=9C=E4=BD=B3=E6=9C=A8?= Date: Fri, 8 Jul 2022 16:39:43 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A4=9A=E7=BA=BF=E7=A8=8B=5F=E5=8D=9C?= =?UTF-8?q?=E4=BD=B3=E6=9C=A8=5F=E6=99=BA10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hw1/hw1/Program.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/hw1/hw1/Program.cs b/hw1/hw1/Program.cs index e0714ee..1dd2624 100644 --- a/hw1/hw1/Program.cs +++ b/hw1/hw1/Program.cs @@ -22,7 +22,7 @@ public void Test() public void P(Semaphore sema) => sema.WaitOne(); public void V(Semaphore sema) => sema.Release(); -// ================================================================================================================ + // ================================================================================================================ // 题目:现在有一个消费者,一个生产者。消费者生产一个蛋糕,消费者消费一个蛋糕。 // 初始时没有蛋糕。两个线程开始的时间不确定。 @@ -30,25 +30,36 @@ public void Test() // 要求:保证消费者消费蛋糕时,生产者已经把蛋糕生产好了 // 修改范围内的代码,允许添加字段或者属性或者方法,使程序满足要求 - + // 提示:使用定义好的 P函数 与 V函数 + public Semaphore sem = new(0, 1); + public void Produce() { // 可以加东西 + P(sem); Producer.ProduceACake(cake); // 这句话不允许改,但可以在前后加代码 // 可以加东西 + V(sem); } public void Consume() { // 可以加东西 + P(sem); + if (cake.Num < 1) + { + V(sem); + return; + } Consumer.ConsumeACake(cake); // 这句话不允许改,但可以在前后加代码 // 可以加东西 + V(sem); } // 可以加东西 From 4f8c276f926933339354e70c40fbfa46d28509c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=9C=E4=BD=B3=E6=9C=A8?= Date: Fri, 8 Jul 2022 17:56:46 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A4=9A=E7=BA=BF=E7=A8=8B=5F=E5=8D=9C?= =?UTF-8?q?=E4=BD=B3=E6=9C=A8=5F=E6=99=BA10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hw1/hw1/Program.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/hw1/hw1/Program.cs b/hw1/hw1/Program.cs index 1dd2624..d562daf 100644 --- a/hw1/hw1/Program.cs +++ b/hw1/hw1/Program.cs @@ -38,7 +38,6 @@ public void Test() public void Produce() { // 可以加东西 - P(sem); Producer.ProduceACake(cake); // 这句话不允许改,但可以在前后加代码 @@ -50,16 +49,9 @@ public void Consume() { // 可以加东西 P(sem); - if (cake.Num < 1) - { - V(sem); - return; - } - Consumer.ConsumeACake(cake); // 这句话不允许改,但可以在前后加代码 // 可以加东西 - V(sem); } // 可以加东西