Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 8
.NET 4.x

синхронизация потоков

29.10.2015, 04:22. Показов 986. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер! Имеется несколько потоков, каждый поток выполняет генетический алгоритм, как их синхронизировать, чтобы в определенный момент времени потоки смогли обменяться данными? То есть, как только генетический алгоритм доходит до 5 поколения(например), каждый поток приостанавливается, происходит обмен данными между этими потоками, а потом генетические алгоритмы дальше продолжают работу.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.10.2015, 04:22
Ответы с готовыми решениями:

Синхронизация потоков
Подскажите как сделать так, чтоб потоки выполнялись по порядку вот такой простой код using System; using System.Diagnostics; ...

Синхронизация потоков
Гуглю уже долго, а ответа все так и не нашел. Ситуация такая. У меня есть метод, который выполняют несколько потоков одновременно: ...

Синхронизация потоков
В общем идея была в том, что создаётся список потоков List<Thread> threads;. Все эти потоки стартуют выполнять одну и ту же функцию. ...

10
Заблокирован
29.10.2015, 05:12
SemErm, синхронизация потока
C#
1
2
3
4
public async void button1_Click....
//что-то делаем
....
await Task.Delay(время);
как-то так
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
29.10.2015, 06:21
Цитата Сообщение от SemErm Посмотреть сообщение
Имеется несколько потоков, каждый поток выполняет генетический алгоритм, как их синхронизировать
Для этого есть примитивы синхронизации. EventWaitHandle и два его наследника, WaitHandle, для вашего случая, думаю, подошло бы SignalAndWait.
https://msdn.microsoft.com/ru-... .110).aspx
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
29.10.2015, 10:07
Цитата Сообщение от insite2012 Посмотреть сообщение
Для этого есть примитивы синхронизации. EventWaitHandle и два его наследника, WaitHandle, для вашего случая, думаю, подошло бы SignalAndWait.
https://msdn.microsoft.com/ru-... .110).aspx
есть более высокоуровневая и более удобная обертка в виде класса Barrier с таким же методом SignalAndWait
0
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 8
04.11.2015, 23:40  [ТС]
Спасибо за Barrier, но можно ли использовать барьер не только один раз, а допустим в цикле, каждые 5 проходов?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
05.11.2015, 01:09
можно
0
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 8
05.11.2015, 01:16  [ТС]
а как это можно реализовать?
создаю барьер
C#
1
 Barrier bar = new Barrier(Count_island, b => {migration();});
создаются потоки
C#
1
2
3
4
5
6
for (int i = 0; i < Convert.ToInt32(CountIsland.Text); i++)
            {
                th.Add(new Thread(Gens[i].live));
                Thread.Sleep(100);
                th[th.Count - 1].Start();
            }
в потоке такой кусок кода:
C#
1
2
3
4
5
6
7
8
9
10
11
while (cZav != cColen && Pocol != MaxPocol - 1)
            {
                //действия...  
                if (Pocol % 5 ==0 && Pocol!=0)
                {
                    barrier.SignalAndWait();
                    file.WriteLine("<++++++ Barrier ++++++>");
                }
                Pocol++;
 
            }
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
05.11.2015, 21:22
Цитата Сообщение от SemErm Посмотреть сообщение
C#
1
if (Pocol % 5 ==0 && Pocol!=0)
ну правильно, на каждой 5-й итерации сигналим и ждем других.
0
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 8
05.11.2015, 21:23  [ТС]
это не работает и программа просто зависает
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
05.11.2015, 21:33
дайте компилируемый пример кода
0
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 8
05.11.2015, 21:45  [ТС]
вот часть кода
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
    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();
 
        }
        
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.11.2015, 21:45
Помогаю со студенческими работами здесь

Синхронизация потоков
Не пойму своей ошибки в этих двух примерах кода, пожалуйста подскажите. Синхронизация с помощью мьютексов. using System; using...

Синхронизация потоков, мьютекс
я имею функцию, которую запускаю в несколько потоков public static void FuckingThread(StreamWriter kok, Regex RegExp) ...

Синхронизация групп потоков
Здравствуйте! Помогите, пожалуйста. У меня есть метод MonitoringThread() в котором запускается 9 потоков. Мне необходимо чтобы каждые из...

Асинхронный сокет синхронизация потоков
Нужно сделать синхронизацию каталогов на сервере и на клиенте используя неблокирующий сокет. Использую асинхронный. На сервере и на...

Синхронизация потоков в бесконечном цикле
Попробовал написать сначала сюда, но, пожалуй, неправильно выбрал раздел. Есть два примерно одинаковых потока. Основной код в обоих...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru