Mega Code Archive

 
Categories / C# / Thread
 

Another way to use lock to synchronize access to an object

/* C#: The Complete Reference  by Herbert Schildt  Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ // Another way to use lock to synchronize access to an object.     using System;  using System.Threading;    class SumArray {     int sum;        public int sumIt(int[] nums) {       sum = 0; // reset sum          for(int i=0; i < nums.Length; i++) {         sum += nums[i];         Console.WriteLine("Running total for " +                Thread.CurrentThread.Name +                " is " + sum);         Thread.Sleep(10); // allow task-switch       }       return sum;    }   }       class MyThread {     public Thread thrd;     int[] a;     int answer;      /* Create one SumArray object for all       instances of MyThread. */    static SumArray sa = new SumArray();       // Construct a new thread.     public MyThread(string name, int[] nums) {       a = nums;       thrd = new Thread(new ThreadStart(this.run));      thrd.Name = name;      thrd.Start(); // start the thread     }        // Begin execution of new thread.     void run() {       Console.WriteLine(thrd.Name + " starting.");          // Lock calls to sumIt().       lock(sa) answer = sa.sumIt(a);        Console.WriteLine("Sum for " + thrd.Name +                          " is " + answer);          Console.WriteLine(thrd.Name + " terminating.");     }   }      public class Sync2 {     public static void Main() {       int[] a = {1, 2, 3, 4, 5};          MyThread mt1 = new MyThread("Child #1", a);       MyThread mt2 = new MyThread("Child #2", a);          mt1.thrd.Join();       mt2.thrd.Join();     }   }