c# 线程池:开启10个线程运行Fibonacci,并在所有线程运行完后,得出结果。
时间: 2023-07-04 19:19:07 浏览: 85
c线程池程序,大家可以参考
4星 · 用户满意度95%
可以使用C#中的线程池来实现这个需求。以下是示例代码:
```csharp
using System;
using System.Threading;
class Program
{
static int fibonacci(int n)
{
if (n <= 1)
return n;
else
return fibonacci(n - 1) + fibonacci(n - 2);
}
static void Main()
{
int numThreads = 10;
int[] results = new int[numThreads];
int count = 0;
for (int i = 0; i < numThreads; i++)
{
ThreadPool.QueueUserWorkItem(delegate (object state)
{
int index = (int)state;
results[index] = fibonacci(30);
Interlocked.Increment(ref count);
}, i);
}
while (count < numThreads)
{
Thread.Sleep(100);
}
int sum = 0;
for (int i = 0; i < numThreads; i++)
{
sum += results[i];
}
Console.WriteLine("The sum of fibonacci(30) for {0} threads is {1}", numThreads, sum);
Console.ReadLine();
}
}
```
在这个示例中,我们首先定义了一个 `fibonacci` 函数,它用来计算斐波那契数列中第n个数的值。然后我们使用线程池来开启10个线程,每个线程都会运行 `fibonacci(30)` 并将结果存储在 `results` 数组中。当所有线程都运行完毕后,我们计算 `results` 数组中所有元素的和,并输出结果。
值得注意的是,在主线程中,我们使用一个循环来等待所有线程都运行完毕。这里我们使用 `Thread.Sleep(100)` 来暂停主线程的执行,避免浪费CPU资源。同时,我们使用 `Interlocked.Increment` 来保证对 `count` 变量的原子增加操作,避免多个线程同时对 `count` 进行更新而导致的错误。
阅读全文