當前位置: 首頁>>代碼示例>>C#>>正文


C# ThreadStaticAttribute類代碼示例

本文整理匯總了C#中System.ThreadStaticAttribute的典型用法代碼示例。如果您正苦於以下問題:C# ThreadStaticAttribute類的具體用法?C# ThreadStaticAttribute怎麽用?C# ThreadStaticAttribute使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。


ThreadStaticAttribute類屬於System命名空間,在下文中一共展示了ThreadStaticAttribute類的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。

示例1: Example

//引入命名空間
using System;
using System.Threading;

public class Example
{
   [ThreadStatic] static double previous = 0.0;
   [ThreadStatic] static double sum = 0.0;
   [ThreadStatic] static int calls = 0;
   [ThreadStatic] static bool abnormal;
   static int totalNumbers = 0;
   static CountdownEvent countdown;
   private static Object lockObj;
   Random rand;
   
   public Example()
   { 
      rand = new Random();
      lockObj = new Object();
      countdown = new CountdownEvent(1);
   } 

   public static void Main()
   {
      Example ex = new Example();
      Thread.CurrentThread.Name = "Main";
      ex.Execute();
      countdown.Wait();
      Console.WriteLine("{0:N0} random numbers were generated.", totalNumbers);
   }

   private void Execute()
   {   
      for (int threads = 1; threads <= 10; threads++)
      {
         Thread newThread = new Thread(new ThreadStart(this.GetRandomNumbers));
         countdown.AddCount();
         newThread.Name = threads.ToString();
         newThread.Start();
      }
      this.GetRandomNumbers();
   }

   private void GetRandomNumbers()
   {
      double result = 0.0;

      for (int ctr = 0; ctr < 2000000; ctr++)
      {
         lock (lockObj) {
            result = rand.NextDouble();
            calls++;
            Interlocked.Increment(ref totalNumbers);
            // We should never get the same random number twice.
            if (result == previous) {
               abnormal = true;
               break;
            }
            else {
               previous = result;
               sum += result;
            }   
         }
      }
      // get last result
      if (abnormal)
         Console.WriteLine("Result is {0} in {1}", previous, Thread.CurrentThread.Name);
       
      Console.WriteLine("Thread {0} finished random number generation.", Thread.CurrentThread.Name);
      Console.WriteLine("Sum = {0:N4}, Mean = {1:N4}, n = {2:N0}\n", sum, sum/calls, calls);        
      countdown.Signal();
   }
}
開發者ID:.NET開發者,項目名稱:System,代碼行數:73,代碼來源:ThreadStaticAttribute

輸出:

Thread 1 finished random number generation.
Sum = 1,000,556.7483, Mean = 0.5003, n = 2,000,000

Thread 6 finished random number generation.
Sum = 999,704.3865, Mean = 0.4999, n = 2,000,000

Thread 2 finished random number generation.
Sum = 999,680.8904, Mean = 0.4998, n = 2,000,000

Thread 10 finished random number generation.
Sum = 999,437.5132, Mean = 0.4997, n = 2,000,000

Thread 8 finished random number generation.
Sum = 1,000,663.7789, Mean = 0.5003, n = 2,000,000

Thread 4 finished random number generation.
Sum = 999,379.5978, Mean = 0.4997, n = 2,000,000

Thread 5 finished random number generation.
Sum = 1,000,011.0605, Mean = 0.5000, n = 2,000,000

Thread 9 finished random number generation.
Sum = 1,000,637.4556, Mean = 0.5003, n = 2,000,000

Thread Main finished random number generation.
Sum = 1,000,676.2381, Mean = 0.5003, n = 2,000,000

Thread 3 finished random number generation.
Sum = 999,951.1025, Mean = 0.5000, n = 2,000,000

Thread 7 finished random number generation.
Sum = 1,000,844.5217, Mean = 0.5004, n = 2,000,000

22,000,000 random numbers were generated.


注:本文中的System.ThreadStaticAttribute類示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。