|
2 / 2 / 1
Регистрация: 28.09.2013
Сообщений: 255
|
|
Два потока, две очереди, два потока21.03.2016, 17:36. Показов 3621. Ответов 4
Метки нет (Все метки)
Есть две очереди. Каждая из них заполняется своим потоком. Есть два потока, которые достают данные из своей очереди. Но когда одна из очередей становится больше заданного размера n, то есть поток достающий данные из этой очереди не справляется, на помощь должен придти достающий поток соседней очереди, но только при условии, что у него со своей очередью все хорошо.
Мне не понятно, как сообщить соседнему достающему потоку, что:"вот мол, помоги мне, я не справляюсь со своей очередью". Пока что есть только потокобезопасная очередь.
0
|
|
| 21.03.2016, 17:36 | |
|
Ответы с готовыми решениями:
4
Два потока winapi Два потока и один объект Сделать в приложении два потока |
|
44 / 44 / 19
Регистрация: 04.05.2014
Сообщений: 190
|
|
| 21.03.2016, 22:28 | |
Сообщение было отмечено vab9petryk как решение
Решение
А сообщать не надо. Просто поток должен смотреть на состояние и своей очереди, и соседней. Если своя почти пустая, то заняться соседней. Очередь потокобезопасна, поэтому всё будет хорошо.
0
|
|
|
2 / 2 / 1
Регистрация: 28.09.2013
Сообщений: 255
|
||
| 22.03.2016, 00:37 [ТС] | ||
|
Сделал в принципе так. Работает. Но вопрос, как теперь остановить потоки потребители? Потоки производители то остановились сами собой, когда добавили n-ое количество элементов. А потоки потребители? Наверное самым оптимальным решением будет завести в очереди флаг. Когда производители завершат добавлять элементы, изменить значение флага, и потребители будут знать, что новых элементов не будет. Им останется только обработать оставшиеся элементы.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 22.03.2016, 00:55 | ||
|
он держит открытыми, но спящими несколько штук потоков (по количеству ядер процессора обычно). клиент грузит пул задачами. может быть 1 штуку, может быть сразу 1000 штук. задачи падают во внутреннию очередь пула. что приводит к сигналу, и один из потоков пробуждается. поток копирует к себе кучку задач. если их слишком много: делает сигнал, что приводит к пробуждению ещё одного потока. ещё один поток копирует к себе кучку задач. если их слишком много: делает сигнал... (ну вы поняли). если все потоки уже пробудулись, но все задачи растащить не смогли, тогда избыток так и остается валяться в очереди, и ждать своего часа. когда очередной поток заканчивает со своей порцией работы, то прежде чем заснуть, он смотрит: не накопилось ли в очереди новой жрачки. если там пусто - засыпает. но если там что то есть, поток копирует к себе очередную кучку задач. если их слишком много: делает сигнал, что приводит к пробуждению ещё одного потока. (ну вы поняли) суть в том, что рабочие потоки гребут задачки небольшими порциями до тех пор пока не перелопатят все, что накапливается в очереди. но выгребают они из этой очереди только по необходимости, что бы минимизировать количество обращений к общему ресурсу. любое добавление очередной порции задач приводит к немедленному пробуждению потока, что приводит к процедуре растаскивания жратвы потоками. поэтому, пока в очереди есть хотя бы одна задачка, гарантируется, что всегда будет хотя бы один не спящий поток, который её захавает.
1
|
||
| 22.03.2016, 13:52 | |
|
0
|
|
| 22.03.2016, 13:52 | |
|
Помогаю со студенческими работами здесь
5
Два потока в одной программе Два потока выводят информацию в консоль Найти два максимальных числа из потока
Как синхронизировать между собой два потока Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
в-строка - входное арифметическое выражение в инфиксной(обычной). . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|