Никогда не работал с потоками, нужна ваша помощь!
Требуется реализация класса на языке C#, аналогичного FixedThreadPool в Java, со следующими требованиями:
* В конструктор этого класса должно передаваться количество потоков, которые будут выполнять задачи.
* Интерфейс класса должен предоставлять методы: boolean execute(Task task, Priority priority) и void stop()
* Интерфейс Task должен содержать один метод: void execute(), который вызывается в произвольном потоке.
* Тип Priority — это перечисление из трёх приоритетов: HIGH, NORMAL, LOW. При этом во время выбора следующего задания из очереди действуют такие правила: на три задачи с приоритетом HIGH выполняется одна задача с приоритетом NORMAL, задачи с приоритетом LOW не выполняются, пока в очереди есть хоть одна задача с другим приоритетом.
* До вызова метода stop() задачи ставятся в очередь на выполнение и метод boolean execute(Task task, Priority priority) сразу же возвращает true, не дожидаясь завершения выполнения задачи; а после вызова stop() новые задачи не добавляются в очередь на выполнение, и метод boolean execute(Task task, Priority priority) сразу же возвращает false.
* Метод stop() ожидает завершения всех текущих задач (не очищая очередь).
Здравствуйте, zoom-zoom, Вы писали:
ZZ>Никогда не работал с потоками, нужна ваша помощь! ZZ>Требуется реализация класса на языке C#, аналогичного FixedThreadPool в Java, со следующими требованиями:
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Aen Sidhe, Вы писали:
ZZ>>>Требуется реализация класса на языке C#, аналогичного FixedThreadPool в Java, со следующими требованиями:
AS>>http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx
L>И что из перечисленого ThreadPool умеете?
Всё, кроме Stop() из коропки. Всё со стопом с допилом.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Aen Sidhe, Вы писали:
L>>>И что из перечисленого ThreadPool умеете?
AS>>Всё, кроме Stop() из коропки. Всё со стопом с допилом.
L>Научите как пользоваться приоритетами в стандартном ThreadPool-е?
Здравствуйте, Aen Sidhe, Вы писали:
L>>Научите как пользоваться приоритетами в стандартном ThreadPool-е?
AS>Thread,CurrentThread.Priority = ...
Во-первых, менять приоритеты потоков threadpool-а — это, гм, дурной тон.
А во-вторых, хотелось бы узнать как приведенный код можно применить к поставленной задаче.
Здравствуйте, Aen Sidhe, Вы писали:
L>>Во-первых, менять приоритеты потоков threadpool-а — это, гм, дурной тон.
AS>Ну это не мне надо, а топикстартеру.
топикстартеру нужен свой кастомный threadpool, а вы ему предлагаете решение, которое некорректно.
L>>А во-вторых, хотелось бы узнать как приведенный код можно применить к поставленной задаче.
AS>Из WaitCallback вызываем, получаем нужный приоритет. Вуаля.
И как это поможет?
На всякий случай напоминаю, что хотел топикстартер: "на три задачи с приоритетом HIGH выполняется одна задача с приоритетом NORMAL".
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Aen Sidhe, Вы писали:
L>>>Во-первых, менять приоритеты потоков threadpool-а — это, гм, дурной тон.
AS>>Ну это не мне надо, а топикстартеру.
L>топикстартеру нужен свой кастомный threadpool, а вы ему предлагаете решение, которое некорректно.
Судя по всему, топикстартер делает лабу/задание к собеседованию.
L>>>А во-вторых, хотелось бы узнать как приведенный код можно применить к поставленной задаче.
AS>>Из WaitCallback вызываем, получаем нужный приоритет. Вуаля.
L>И как это поможет? L>На всякий случай напоминаю, что хотел топикстартер: "на три задачи с приоритетом HIGH выполняется одна задача с приоритетом NORMAL".
А, гм. Тогда я мудак, да. Не увидел этого требования. Но и тогда это решается семафорами и прочим.
Здравствуйте, Aen Sidhe, Вы писали:
AS>Здравствуйте, Lloyd, Вы писали:
L>>Здравствуйте, Aen Sidhe, Вы писали:
L>>>>Во-первых, менять приоритеты потоков threadpool-а — это, гм, дурной тон.
AS>>>Ну это не мне надо, а топикстартеру.
L>>топикстартеру нужен свой кастомный threadpool, а вы ему предлагаете решение, которое некорректно.
AS>Судя по всему, топикстартер делает лабу/задание к собеседованию.
ВЫ попали в точку!!! Я раньше писал простые Win-приложения на C#, а в данной задаче требуется знания профи.
L>>>>А во-вторых, хотелось бы узнать как приведенный код можно применить к поставленной задаче.
AS>>>Из WaitCallback вызываем, получаем нужный приоритет. Вуаля.
L>>И как это поможет? L>>На всякий случай напоминаю, что хотел топикстартер: "на три задачи с приоритетом HIGH выполняется одна задача с приоритетом NORMAL".
AS>А, гм. Тогда я мудак, да. Не увидел этого требования. Но и тогда это решается семафорами и прочим.
Здравствуйте, zoom-zoom, Вы писали:
L>>>>>Во-первых, менять приоритеты потоков threadpool-а — это, гм, дурной тон.
AS>>>>Ну это не мне надо, а топикстартеру.
L>>>топикстартеру нужен свой кастомный threadpool, а вы ему предлагаете решение, которое некорректно.
AS>>Судя по всему, топикстартер делает лабу/задание к собеседованию.
ZZ>ВЫ попали в точку!!! Я раньше писал простые Win-приложения на C#, а в данной задаче требуется знания профи.
Здравствуйте, zoom-zoom, Вы писали:
D>>Тестовое задание для "Связного" делаем? ZZ>От Вас ничего не скроешь! Надеюсь Вы не из Связного? )))) ZZ>Хотя может лучше и из Связного и поможет поможете с такой задачей. )
Нет не из связного
Тоже делал это задание, но не взяли. Видимо код ревью не прошёл
Хотя мне мой класс тут же пригодился в одной задаче — и он отлично работал.
Что им могло не понравится..
Здравствуйте, zoom-zoom, Вы писали:
D>>Тестовое задание для "Связного" делаем? ZZ>От Вас ничего не скроешь! Надеюсь Вы не из Связного? )))) ZZ>Хотя может лучше и из Связного и поможет поможете с такой задачей. )