Csharp/C Sharp/Thread/Thread Lock

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

illustrates the use of the Interlocked object

/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
  Example14_9.cs illustrates the use of the Interlocked object
*/
using System;
using System.Threading;
public class Example14_9 
{
  // a shared counter
  private int Runs = 0;
  // the CountUp method increments the shared counter
  public  void CountUp() 
  {
    while (Runs < 10)
    {
      Interlocked.Increment(ref Runs);
      Console.WriteLine(Thread.CurrentThread.Name + " " + Runs);
      Thread.Sleep(1000);
    } 
  }
  public static void Main() 
  {
    // Make an instance of this class
    Example14_9 ex = new Example14_9();
    // And run the test outside of the static method
    ex.RunThreads();
  }
  public void RunThreads()
  {
    // create and launch two threads
    Thread t2 = new Thread(new ThreadStart(CountUp));
    t2.Name = "t2";
    Thread t3 = new Thread(new ThreadStart(CountUp));
    t3.Name = "t3";
    t2.Start();
    t3.Start();
  }
}


illustrates the use of the lock object

/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
  Example14_8.cs illustrates the use of the lock object
*/
using System;
using System.Threading;
public class Example14_8 
{
  // a shared counter
  private int Runs = 0;
  // the CountUp method increments the shared counter
  public  void CountUp() 
  {
    while (Runs < 10)
    {
      lock(this)
      {
        int Temp = Runs;
        Temp++;
        Console.WriteLine(Thread.CurrentThread.Name + " " + Temp);
        Thread.Sleep(1000);
        Runs = Temp;
      }
    } 
  }
  public static void Main() 
  {
    // Make an instance of this class
    Example14_8 ex = new Example14_8();
    // And run the test outside of the static method
    ex.RunThreads();
  }
  public void RunThreads()
  {
    // create and launch two threads
    Thread t2 = new Thread(new ThreadStart(CountUp));
    t2.Name = "t2";
    Thread t3 = new Thread(new ThreadStart(CountUp));
    t3.Name = "t3";
    t2.Start();
    t3.Start();
  }
}