你的位置:首页 > 软件开发 > ASP.net > 多线程(基础篇3)

多线程(基础篇3)

发布时间:2016-12-17 15:00:09
在上一篇多线程(基础篇2)中,我们主要讲述了确定线程的状态、线程优先级、前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程、使用Monitor锁定线程以及线程中的异常处理。九、使用C#的lock关键字锁定线程1、使用Visual ...

多线程(基础篇3)

  在上一篇多get='_blank'>线程(基础篇2)中,我们主要讲述了确定线程的状态、线程优先级、前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程、使用Monitor锁定线程以及线程中的异常处理。

九、使用C#的lock关键字锁定线程

1、使用Visual Studio 2015创建一个新的控制台应用程序。

2、双击打开“Program.cs”文件,然后修改为如下代码:

 1 using System; 2 using System.Threading; 3 using static System.Console; 4  5 namespace Recipe09 6 { 7   abstract class CounterBase 8   { 9     public abstract void Increment();10     public abstract void Decrement();11   }12 13   class Counter : CounterBase14   {15     public int Count { get; private set; }16 17     public override void Increment()18     {19       Count++;20     }21 22     public override void Decrement()23     {24       Count--;25     }26   }27 28   class CounterWithLock : CounterBase29   {30     private readonly object syncRoot = new Object();31 32     public int Count { get; private set; }33 34     public override void Increment()35     {36       lock (syncRoot)37       {38         Count++;39       }40     }41 42     public override void Decrement()43     {44       lock (syncRoot)45       {46         Count--;47       }48     }49   }50 51   class Program52   {53     static void TestCounter(CounterBase c)54     {55       for (int i = 0; i < 100000; i++)56       {57         c.Increment();58         c.Decrement();59       }60     }61 62     static void Main(string[] args)63     {64       WriteLine("Incorrect counter");65       var c1 = new Counter();66       var t1 = new Thread(() => TestCounter(c1));67       var t2 = new Thread(() => TestCounter(c1));68       var t3 = new Thread(() => TestCounter(c1));69       t1.Start();70       t2.Start();71       t3.Start();72       t1.Join();73       t2.Join();74       t3.Join();75       WriteLine($"Total count: {c1.Count}");76 77       WriteLine("--------------------------");78 79       WriteLine("Correct counter");80       var c2 = new CounterWithLock();81       t1 = new Thread(() => TestCounter(c2));82       t2 = new Thread(() => TestCounter(c2));83       t3 = new Thread(() => TestCounter(c2));84       t1.Start();85       t2.Start();86       t3.Start();87       t1.Join();88       t2.Join();89       t3.Join();90       WriteLine($"Total count: {c2.Count}");91     }92   }93 }

原标题:多线程(基础篇3)

关键词:线程

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。