trying to find 100000! using biginteger, stack and without using task library. Threads are randomly taking others args and break the program. How to make them organized but parallel?
class Program
{
static readonly int DegreeOfParallelism = Environment.ProcessorCount;
Stack<BigInteger> numbers = new Stack<BigInteger>(DegreeOfParallelism);
public BigInteger Factorial(BigInteger x)
{
for (int i = 1; (i <= DegreeOfParallelism && i <= x); i++)
{
Thread thread = new Thread(() => { Multiply(x, i); });
thread.Name = $"thread{i}";
thread.Start();
}
Thread.Sleep(1000);
BigInteger finalResult = 1;
while (numbers.Count>0)
{
finalResult *= numbers.Pop();
}
return finalResult;
}
void Multiply(BigInteger upperBound, int startFrom)
{
BigInteger result = 1;
for (BigInteger j = startFrom; j <= upperBound; j += DegreeOfParallelism)
{
result *= j;
Console.WriteLine("res = {0}", result);
}
numbers.Push(result);
Console.WriteLine(numbers.Peek());
Console.WriteLine(Thread.CurrentThread.Name);
}
static int Main()
{
BigInteger n = 0;
Console.WriteLine("Write a number");
n = Convert.ToInt64(Console.ReadLine());
var program = new Program();
Console.WriteLine(program.Factorial(n));
return 0;
}
}