private void Tick(FitnessEvaluation fitnessEvaluation) { lock (fitnessEvaluation) { if (fitnessEvaluation.Queued) { bool ticked; lock (TickTournamentLock) //Has to wait for a tournament to complete before updating any fitness { ticked = fitnessEvaluation.Tick(); } if (ticked) { fitnessEvaluation.Queued = false; Console.WriteLine("Caclulated fitness {0}", fitnessEvaluation.SquaredErrorSum); _onFitnessCalculated(fitnessEvaluation); } else if (fitnessEvaluation.Queued) { lock (_fitnessEvaluations) { _fitnessEvaluations.Enqueue(fitnessEvaluation); Console.WriteLine("After Enqueueing again: _fitessEvaluations.Count = {0}", _fitnessEvaluations.Count); } } } } }
public void Enqueue(FitnessEvaluation fitnessEvaluation) { lock (fitnessEvaluation) { if (fitnessEvaluation.Tick()) { fitnessEvaluation.Queued = false; //Console.WriteLine("Caclulated fitness without enqueuing {0}", fitnessEvaluation.SquaredErrorSum); _onFitnessCalculated(fitnessEvaluation); } else if (!fitnessEvaluation.Queued) { fitnessEvaluation.Queued = true; lock (_fitnessEvaluations) { _fitnessEvaluations.Enqueue(fitnessEvaluation); Monitor.PulseAll(_fitnessEvaluations); Console.WriteLine("After Enqueueing: _fintessEvaluations.Count = {0}", _fitnessEvaluations.Count); } } } }