2024年3月9日发(作者:)

说明:这是单线程微软的源码。爱好C#者可以自学

using System;

using ing;

using tions;

using c;

using System;

using ing;

// Fibonacci 类为使用辅助

// 线程执行长时间的 Fibonacci(N) 计算提供了一个接口

// N 是为 Fibonacci 构造函数提供的,此外还提供了

// 操作完成时对象发出的事件信号。

// 然后,可以使用 FibOfN 属性来检索结果。

public class Fibonacci

{

public Fibonacci(int n, ManualResetEvent doneEvent)

{

_n = n;

_doneEvent = doneEvent;

}

// 供线程池使用的包装方法。

public void ThreadPoolCallback(Object threadContext)

{

int threadIndex = (int)threadContext;

ine("thread {0} ", threadIndex);

_fibOfN = Calculate(_n);

ine("thread {0} ", threadIndex);

_();

}

// 计算第 N 个斐波纳契数的递归方法。

public int Calculate(int n)

{

if (n <= 1)

{

return n;

}

else

{

return Calculate(n - 1) + Calculate(n - 2);

}

}

public int N { get { return _n; } }

private int _n;

public int FibOfN { get { return _fibOfN; } }

private int _fibOfN;

ManualResetEvent _doneEvent;

}

public class ThreadPoolExample

{

static void Main()

{

const int FibonacciCalculations = 10;

// 每个 Fibonacci 对象使用一个事件

ManualResetEvent[] doneEvents = new ManualResetEvent[FibonacciCalculations];

Fibonacci[] fibArray = new Fibonacci[FibonacciCalculations];

Random r = new Random();

// 使用 ThreadPool 配置和启动线程:

ine("launching {0} ", FibonacciCalculations);

for (int i = 0; i < FibonacciCalculations; i++)

{

doneEvents[i] = new ManualResetEvent(false);

Fibonacci f = new Fibonacci((20,40), doneEvents[i]);

fibArray[i] = f;

serWorkItem(PoolCallback, i);

}

// 等待池中的所有线程执行计算...

l(doneEvents);

ine("Calculations complete.");

// 显示结果...

for (int i= 0; i

{

Fibonacci f = fibArray[i];

ine("Fibonacci({0}) = {1}", f.N, );

}

}

}