AI智能
改变未来

C#多线程任务同步

首先创建全局变量:

int count =0;object monitorObject = new object();

创建两个任务:

public  void Task01(){for (int i = 0; i < 1900000; i++){Monitor.Enter(monitorObject);//避免多线程对资源的竞争,导致数据不同步,利用Monitor.Enter获取指定对象排他锁。//加锁是耗时的。count++;Console.WriteLine(\"Thread01:\" + i);Monitor.Exit(monitorObject);//释放指定对象的排他锁。}}public void Task02(){for (int i = 0; i < 1900000; i++){Monitor.Enter(monitorObject);//避免多线程对资源的竞争,导致数据不同步,利用Monitor.Enter获取指定对象排他锁。count--;Console.WriteLine(\"Thread02:\" + i);Monitor.Exit(monitorObject);//释放指定对象的排他锁。}}

控制台程序启动多线程,并打印count的值:

Task t1 = Task.Run(Task01);Task t2 = Task.Run(Task02);t1.Wait();t2.Wait();Console.WriteLine(\"count的值:\" + count);Console.ReadLine();

若果没有,由于多线程的资源竞争,count的结果是不准确的,前提是循环的次数足够大。

Monitor.Enter(monitorObject);Monitor.Exit(monitorObject);

也可以简单的利用lock

public void Task01(){for (int i = 0; i < 1900000; i++){lock (monitorObject){count++;}}}public void Task02(){for (int i = 0; i < 1900000; i++){lock (monitorObject){count--;}}}

原理都是一样的。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » C#多线程任务同步