C#多线程同步问题---使用Monitor类

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using System.Threading;
   6: using System.Threading.Tasks;
   7:  
   8: namespace SynchronizationSamples
   9: {
  10:     public class SharedState
  11:     {
  12:         private int state = 0;
  13:         private object syncRoot = new object();
  14:         public int State 
  15:         { 
  16:             get{return state;}
  17:             set { state = value; }
  18:         }
  19:  
  20:         public int IncrementState()
  21:         {
  22:             bool lockTaken = false;
  23:             Monitor.TryEnter(syncRoot, 500, ref lockTaken);
  24:             if (lockTaken)
  25:             {
  26:                 try
  27:                 {
  28:                     return ++state;
  29:                 }
  30:                 finally
  31:                 {
  32:                     Monitor.Exit(syncRoot);
  33:                 }
  34:             }
  35:             else
  36:             {
  37:                 return state;
  38:             }
  39:         }
  40:     }
  41:  
  42:     public class Job
  43:     {
  44:         SharedState sharedState;
  45:         public Job(SharedState sharedState)
  46:         {
  47:             this.sharedState = sharedState;
  48:         }
  49:  
  50:         public void DoTheJob()
  51:         {
  52:             for (int i = 0; i < 50000;i++ )
  53:             {
  54:                 sharedState.IncrementState();
  55:             }
  56:         }
  57:     }
  58:     class Program
  59:     {
  60:         static void Main(string[] args)
  61:         {
  62:             int numTasks = 20;
  63:             var state = new SharedState();
  64:             var tasks = new Task[numTasks];
  65:  
  66:             for (int i = 0; i < numTasks; i++)
  67:             {
  68:                 tasks[i] = new Task(new Job(state).DoTheJob);
  69:                 tasks[i].Start();
  70:             }
  71:  
  72:             for (int i = 0; i < numTasks;i++ )
  73:             {
  74:                 tasks[i].Wait();
  75:             }
  76:             Console.WriteLine("summarized {0}",state.State);
  77:             Console.Read();
  78:         }
  79:     }
  80: }

转载于:https://www.cnblogs.com/jerry01/archive/2012/12/12/2708823.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值