소년포비의 세계정복!!

[C#] ThreadPool 이용 본문

프로그램 세상/C#

[C#] ThreadPool 이용

소년포비 2009. 11. 3. 20:40

 5개의 스레드를 스레드풀에 생성해 놓고 이 작업이 끝난 후에  print 문으로 콘솔창에 출력하는 내용

 

using System;
using System.Threading;

namespace ThreadPoolTest
{
  class Program
  {
    private const int NumThreads = 5;

    private static int[] inputArray;
    private static double[] resultArray;
    private static ManualResetEvent[] resetEvents;

    private static void Main(string[] args)
    {
      inputArray = new int[NumThreads];
      resultArray = new double[NumThreads];
      resetEvents = new ManualResetEvent[NumThreads];

      Random rand = new Random();
      for (int s = 0; s < NumThreads; s++)
      {
        inputArray[s] = rand.Next(1,5000000);
        resetEvents[s] = new ManualResetEvent(false);
        ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork), (object)s);
      }

      Console.WriteLine("Waiting...");

      WaitHandle.WaitAll(resetEvents);

      Console.WriteLine("And the answers are: ");
      for (int i = 0; i < NumThreads; i++)
        Console.WriteLine(inputArray[i] + " -> " + resultArray[i]);
    }

    private static void DoWork(object o)
    {
      int index = (int)o;

      for (int i = 1; i < inputArray[index]; i++)
        resultArray[index] += 1.0 / (i * (i + 1));

      resetEvents[index].Set();
    }
  }
}

'프로그램 세상 > C#' 카테고리의 다른 글

[C#] 다중서버관리  (0) 2009.11.11
[C#] 파일 백업 툴 FileSyncer  (0) 2009.11.09
[C#] 체스 게임   (0) 2009.11.03
[C#] 레지스트리 값 읽고, 쓰기 방법 2  (0) 2009.10.29
[C#] 초보자분들을 위한 기초강좌   (0) 2009.10.28