.NET 4.x синхронизация потоков - C# (233272)
Формулировка задачи:
Добрый вечер! Имеется несколько потоков, каждый поток выполняет генетический алгоритм, как их синхронизировать, чтобы в определенный момент времени потоки смогли обменяться данными? То есть, как только генетический алгоритм доходит до 5 поколения(например), каждый поток приостанавливается, происходит обмен данными между этими потоками, а потом генетические алгоритмы дальше продолжают работу.
Решение задачи: «.NET 4.x синхронизация потоков»
textual
Листинг программы
public partial class Form1 : Form { void migration() { //миграция } private void StartGeneticAlg(int TM) { List<Thread> Th = new List<Thread>(); Gens = new GeneticAlg[island]; Barrier bar = new Barrier(island, b => {migration();}); int[,] mat = GetM(city, A, B, TM); for (int i = 0; i < island; i++) { Gens[i] = new GeneticAlg(city, chance, repeat, osob, mat, bar, FileLog,island); } for (int i = 0; i < island; i++) { Th.Add(new Thread(Gens[i].live)); Thread.Sleep(100); Th[Th.Count - 1].Start(); } for (int i = 0; i < island; i++) { Th[i].Join(); LogBox.Items.Add(Gens[i].Best.value); } } private void button1_Click(object sender, EventArgs e) { StartGeneticAlg(TypeMatrix); } } public class GeneticAlg { // Поля public void live() { int cZav = 0; Indevidual prev, now; prev = AdamGeneration(); while (cZav != cColen && Pocol != MaxPocol - 1) { now = getColen(Pocol); if (prev.value == now.value) { cZav++; } else cZav = 0; prev = now; if (Pocol%5==0 && Pocol!=0) { barrier.SignalAndWait(); file.WriteLine("<++++++ Barrier ++++++>"); } Pocol++; } //barrier.AddParticipants(); if (Pocol == MaxPocol - 1) { file.WriteLine("Зацикливание"); } else { BestOfTheBest = FindMinOs(Pocol); WriteToFile(FindMinOs(Pocol)); } if (cZav == cColen) { file.WriteLine("Число совподений достигло " + cColen); } file.Close(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д