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: return Interlocked.Increment(ref state);
23:
24: }
25: }
26:
27: public class Job
28: {
29: SharedState sharedState;
30: public Job(SharedState sharedState)
31: {
32: this.sharedState = sharedState;
33: }
34:
35: public void DoTheJob()
36: {
37: for (int i = 0; i < 50000;i++ )
38: {
39: sharedState.IncrementState();
40: }
41: }
42: }
43: class Program
44: {
45: static void Main(string[] args)
46: {
47: int numTasks = 20;
48: var state = new SharedState();
49: var tasks = new Task[numTasks];
50:
51: for (int i = 0; i < numTasks; i++)
52: {
53: tasks[i] = new Task(new Job(state).DoTheJob);
54: tasks[i].Start();
55: }
56:
57: for (int i = 0; i < numTasks;i++ )
58: {
59: tasks[i].Wait();
60: }
61: Console.WriteLine("summarized {0}",state.State);
62: Console.Read();
63: }
64: }
65: }