private void Cycle(int[,] matrix, int multiplyNumber)
 {
     for (int i = 0; i < matrix.GetLength(0); i++)
     {
         informationAboutMatrix newInformation = CreateStrInformation(matrix, i, multiplyNumber);
         Determinant3(newInformation);
     }
 }
        private informationAboutMatrix CreateStrInformation(int[,] matrix, int i, int multiplyNumber)
        {
            informationAboutMatrix information = new informationAboutMatrix();

            information.multiplyNumber = (int)(matrix[0, i] * Math.Pow(-1, i)) * multiplyNumber;
            information.smallMatrix    = SmallMatrix(matrix, 0, i);
            return(information);
        }
        private informationAboutMatrix CreateStrInformation(int[,] matrix, int i, int multiplyNumber)
        {
            informationAboutMatrix information = new informationAboutMatrix();

            information.multiplyNumber = (int)(matrix[0, i] * Math.Pow(-1, i)) * multiplyNumber;
            information.smallMatrix    = SmallMatrix(matrix, 0, i);
            mutexCountEvents.WaitOne();
            information.resetEvent = manualResets[countEvents];
            countEvents++;
            mutexCountEvents.ReleaseMutex();
            return(information);
        }
 private int Determinant(int[,] matrix)
 {
     if (matrix.Length == 1)
     {
         return(matrix[0, 0]);
     }
     for (int i = 0; i < matrix.GetLength(0); i++)
     {
         semaphores.WaitOne();
         informationAboutMatrix newInformation = CreateStrInformation(matrix, i, 1);
         ThreadPool.QueueUserWorkItem((x) => Determinant2(x), newInformation);
     }
     resetEvent.WaitOne();
     return(determinant);
 }
 private void CycleWithOrWithoutThread(int[,] matrix, int multiplyNumber)
 {
     for (int i = 0; i < matrix.GetLength(0); i++)
     {
         informationAboutMatrix newInformation = CreateStrInformation(matrix, i, multiplyNumber);
         if (maxUsingThreads != 0)
         {
             CreateThread(newInformation);
         }
         else
         {
             FindDeterminantWithoutThreads(newInformation);
         }
     }
 }
 private void Cycle(int[,] matrix, int multiplyNumber)
 {
     for (int i = 0; i < matrix.GetLength(0); i++)
     {
         informationAboutMatrix newInformation = CreateStrInformation(matrix, i, multiplyNumber);
         if (semaphoresCount != 0)
         {
             CreateThread(newInformation);
         }
         else
         {
             DeterminantWithoutThreads(newInformation);
         }
     }
 }
 private void CreateThread(informationAboutMatrix information)
 {
     maxUsingThreads--;
     ThreadPool.QueueUserWorkItem((x) => FindDeterminantInThread(x), information);
 }
 private void CreateThread(informationAboutMatrix information)
 {
     semaphoresCount--;
     ThreadPool.QueueUserWorkItem((x) => DeterminantInThread(x), information);
 }