diff --git a/HW-Async&Thread-1/Program.cs b/HW-Async&Thread-1/Program.cs index 6965f01..70850e4 100644 --- a/HW-Async&Thread-1/Program.cs +++ b/HW-Async&Thread-1/Program.cs @@ -56,12 +56,13 @@ public abstract class Expr public class ValueExpr(int initVal) : Expr { int val = initVal; + readonly object valLock = new(); public override int Val { get { - // TODO 1:读取操作 - return val; + lock (valLock) + return val; } } @@ -74,16 +75,23 @@ public int NewVal set { // TODO 2:修改操作 + lock (valLock) + val = value; + Update().Wait(); } } public override async Task Update() { // TODO 3:更新操作 + if (parent != null) + await parent.Update(); } public override void Register(Expr parent) { + this.parent = parent; + Update().Wait(); // TODO 4:注册操作 } } @@ -95,12 +103,14 @@ public override void Register(Expr parent) public class AddExpr : Expr { int val = 0; + readonly object valLock = new(); public override int Val { get { // TODO 5:读取操作 - return val; + lock (valLock) + return val; } } @@ -116,10 +126,16 @@ public AddExpr(Expr A, Expr B) public override async Task Update() { // TODO 6:更新操作 + lock (valLock) + val = ExprA.Val + ExprB.Val; + if (parent != null) + await parent.Update(); } public override void Register(Expr parent) { // TODO 7:注册操作 + this.parent = parent; + Update().Wait(); } }