2016-09-26 2 views
-1

Я ищу способ обработки потоков (я думаю, используя семафоры), чтобы остановить все потоки от входа в определенную область на некоторое время. Когда все потоки, которые в настоящее время находятся в регионе, выходят из него (так что в нем больше нет потока), я хочу сделать что-то, что влияет на этот регион. После этого регион снова должен быть включен многими потоками.Остановить все потоки от ввода региона

Я не вижу, как это сделать с помощью Семафора, поскольку в документации я не могу найти никаких свойств, которые f.e. Позвольте мне изменить его свойство на сколько может войти в регион и даже получить сумму, сколько из них вообще.

Как я мог это сделать?

+1

Нам нужно, чтобы ваша реализация задачи/потоковой передачи имела шанс помочь вам. «Когда все потоки, которые в настоящее время находятся в регионе, выходят из него (так что в нем больше нет потока), я хочу сделать что-то, что влияет на этот регион» не имеет смысла, как вы можете «повлиять на регион», когда есть нулевые потоки ? Я предполагаю, что у вас есть «основной» поток, и вы запускаете множество задач, и вы хотите, чтобы основной поток делал что-то в этом регионе, но только тогда, когда в этом регионе нет задач. – Quantic

+0

Извините, я не могу теоретически говорить на этой доске? Его теоретическая вещь, которая проще выразить, как я сделал, вместо публикации какого-либо осязаемого кода. – Ravior

+0

Возможно, ваше название, вероятно, было приостановлено. Снова прочитав ваш текст, ваш вопрос более ясен: «Как вы подсчитаете количество потоков, которые в настоящее время находятся» в области кода? И как я могу отличить один поток от другого, поэтому я могу позволить только определенным, идентифицируемым потокам вводить область?". У меня нет ответа на этот вопрос, но я чувствую себя как [События синхронизации и Wait Handles] (https://msdn.microsoft.com/en-us/library/mt679037.aspx#Anchor_2). Если вы хотите «остановить все потоки от входа в область», тогда поставьте 'while (true) {}' над этим регионом, и нити не войдут в него. – Quantic

ответ

0

Звучит немного так, как будто вы ищете класс ReaderWriterLockSlim. Многие потоки могут вводить/получать блокировку чтения, но только один поток может получить блокировку записи.

Смежные вопросы