Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
15 / 15 / 1
Регистрация: 05.04.2013
Сообщений: 94
1

Более рациональный способ синхронизации потоков

22.03.2014, 20:46. Показов 754. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот что делаю я, чтобы дождаться выполнения метода, который вызывается неконтролируемо
C#
1
2
Task tsk = Task.Factory.StartNew(() => { while (!_isResult); });
tsk.Wait();
То есть мы ждём, пока флажок _isResult будет true, но как вы поняли это происходит в методе, который вызывается неконтролируемо.
Вопрос: имеется ли какой-нибудь способ, который позволил бы продолжать поток, пока _isResult не станет true ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2014, 20:46
Ответы с готовыми решениями:

Есть ли ошибка в синхронизации доступа к переменной из нескольких потоков?
Безопасно ли читать из переменной вот так? Ведь она не volatile. В книге CLR Via C# есть пример с...

Более рациональный способ
Как можно рациональней изменить код ? using System; using System.Collections.Generic; using...

Средства синхронизации потоков. Длительное ожидание
Здравствуйте. Сперва опишу абстрактную суть задачи: есть сервис который работает с объектами...

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

6
Эксперт .NET
5545 / 4308 / 1218
Регистрация: 12.10.2013
Сообщений: 12,356
Записей в блоге: 2
22.03.2014, 20:58 2
Не совсем понятно что же все-таки надо, но засинхронизировать потоки можно, к примеру, через события. Один поток - издатель события, второй - подписчик.
0
15 / 15 / 1
Регистрация: 05.04.2013
Сообщений: 94
22.03.2014, 21:00  [ТС] 3
Вопрос: имеется ли какой-нибудь рациональный способ, который позволил бы продолжать поток, пока _isResult не станет true, а не использоваться для этого while
0
Эксперт .NET
5545 / 4308 / 1218
Регистрация: 12.10.2013
Сообщений: 12,356
Записей в блоге: 2
22.03.2014, 21:07 4
Повторяю - через события!
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
22.03.2014, 21:25 5
C#
1
Task.Factory.StartNew(() => { Foo(); }).ContinueWith(task => { Bar(); });
0
15 / 15 / 1
Регистрация: 05.04.2013
Сообщений: 94
23.03.2014, 00:20  [ТС] 6
Psilon, Bar() должен принимать аргументы, которые мы заведомо не знаем. Вот такая непростая задача.
0
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
23.03.2014, 14:42 7
Что значит аргументы которых мы не знаем?

В любом случае решение указал выше Psilon, еще один пример.

C#
1
2
3
4
5
6
7
      Task.Run<int>(() =>
      {
        Thread.Sleep(500);
        return 20;
      }).
      ContinueWith<int>(task => task.Result / 2).
      ContinueWith(task => Console.WriteLine(task.Result));
0
23.03.2014, 14:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2014, 14:42
Помогаю со студенческими работами здесь

Использовать или мьютекс или монитор для синхронизации потоков
Ребят, дошел до синхронизации потоков, и застрял. В делфи по моему было это проще. Короче суть...

Использовать массивы или есть более элегантный способ?
Пишу игру. Есть предметы которые выпадают из монстров. Например: золото, аптечка, автомат и т.д. У...

Есть ли более простой и оптимальный способ решения данной задачи?
Добрый день! Ситуация следующая: Есть класс Event. public class Event { public string...

Нужно сделать чтобы в цикле работало не более 10-ти потоков
Доброго времени. Возник коллапс мыслительного процесса. Прошу помощи или совета... Есть цикл...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru