当前位置: 首页>>代码示例>>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;未经允许,请勿转载。