|
4 / 4 / 0
Регистрация: 21.02.2012
Сообщений: 7
|
|||||||||||
Многопоточность. Взаимодействие потоков.21.02.2012, 23:00. Показов 6651. Ответов 29
Метки нет (Все метки)
Приветствие.
Возникла задача напрограммировать многопоточную программу. Вот нарисовал приблизительно как оно должно работать: Thread 1 работает как-то так:
Thread3 взаимодействует с пользователем и у него внутри есть функции(для работы с Thread1) типа
Теперь вопросы:
Заранее спасибо за ответы. ps Заранее извиняюсь за криво поставленные вопросы, с параллельными потоками сталкиваюсь почти впервые, да и C++ я знаю довольно почти никак(на уровне "да это-же Си с классами и throw"). pps
0
|
|||||||||||
| 21.02.2012, 23:00 | |
|
Ответы с готовыми решениями:
29
Многопоточность. Замедление/уменьшение потоков Многопоточность. Создание потоков в цикле Многопоточность и синхронизация потоков (VS 2012) |
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
||||||||||||||||
| 22.02.2012, 03:54 | ||||||||||||||||
|
parus, правильнее начать прогить и по ходу, если возникают проблемы, задавать вопросы здесь. А не так, почитал чего-то, собрал кучу всего, что не понимаешь, и взвалил в одну тему.
По вашим вопросам видно что вы даже не пытались разобраться, хотя большая часть ответов есть в википедии. Для взаимодействия потоков используются семафоры и мьютексы. В мьютекс оборачиваются общие объекты (глобальные переменные, массивы и т.д.), которые могут изменять несколько потоков. Делается это в каждом потоке так:
В итоге получится так, что два потока не могут одновременно записывать что-то в одну область памяти, или например изменить адрес указателей и т.д. Ну с семафором всё просто, в одном потоке он увеличивается на 1 вызовом
Семафоры используются для организации очереди обработки.
1
|
||||||||||||||||
|
4 / 4 / 0
Регистрация: 21.02.2012
Сообщений: 7
|
||
| 22.02.2012, 13:12 [ТС] | ||
|
Да и тут задача в упрощённом виде, т.ч. потоки нужны. Union Ну я начал, сделал работу с девайсом(с таймаутами и исключениями). А дальше с потоками непонятно. Ничего. Спасибо, что-то стало понятней. Осталось приблизительно два вопроса: 0) Память, выделенная приложению никак не разделяется на память, выделенную потоку и единственная проблема общего доступа - это вытеснение потока во время работы с общей переменной? 1) И всё-таки, как правильно сделать(хотя-бы как это правильно называется) такое взаимодействие между Thread3 и Thread2?
0
|
||
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|
| 22.02.2012, 17:55 | |
|
По поводу первого вопроса, правильнее сказать не "вытеснение потока во время работы с общей переменной", а блокировка всех потоков, которые хотят обратиться к общей памяти, когда какой-то один из потоков к ней обращается, на время этого самого обращения.
Второй вопрос не понял, "такое взаимодействие" - это какое? Я вроде расписал 2 используемых принципа. Если не во всех, то в большинстве случаев их достаточно, в т.ч. и в вашей задаче. Однако niXman прав, тут достаточно одного потока... А подключать доп. потоки нужно только тогда, когда процессор не справляется с задачами в одном. Я правда ниразу не юзал asio, предпочитаю всё делать вручную, но судя по обсуждениям эту вещь стоит освоить.
0
|
|
|
4 / 4 / 0
Регистрация: 21.02.2012
Сообщений: 7
|
|||||||
| 22.02.2012, 18:08 [ТС] | |||||||
1) Не буду спорить, ибо почти ничего не понимаю. Но многопоточность ещё упрощает разработку. Иначе зачем были-бы RTOS для микроконтроллеров, ведь они потребляют ресурсы, которых на МК и так немного.
0
|
|||||||
|
|
||||||||
| 22.02.2012, 18:44 | ||||||||
![]()
0
|
||||||||
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|
| 22.02.2012, 19:13 | |
|
niXman, я не приводил говнокод, я описал как организуется многопоточность. А дальше, с использованием этих фукнций, прогер может написать как говнокод, так и нормальный, компактный, быстрый код... А если постараться, то можно написать даже лучше, чем с использованием asio.
Поэтому, на мой взгляд, товарищу parus сначала следует освоить именно то, что я написал в третьем посте темы. Потому как это основы. А дальше улучшать свой код, изучать новые методы, технологии и т.д.
0
|
|
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|
| 22.02.2012, 21:11 | |
|
Мне кажется очевидно что это не требует доказательств. Такой вывод можно сделать следуя из назначения asio и назначения pthread. Вы считаете что asio более универсальна, нежеле чем pthread?
Очень часто сетевые приложения занимаются обработкой не только сетевых задач. asio ориентирована только на решение сетевых задач. Используя pthread можно самому организовать любую структуру приложения. Добавлено через 3 минуты И да, я говорил что с использованием pthread в специфических случаях можно составить приложение с лучшей структурой, однако часто это не оправдано и если судить вообще, то я с вами не спорю, надо использовать asio и не париться.
0
|
|
|
|
||||||
| 22.02.2012, 21:24 | ||||||
|
Добавлено через 2 минуты
0
|
||||||
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
||
| 22.02.2012, 21:25 | ||
|
Я про это:
0
|
||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 23.02.2012, 10:48 | |
|
да, да, этот самый говнокод уже за Вас нагородили авторы boost
0
|
|
|
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
|
|
| 24.02.2012, 00:13 | |
|
ВО, g_u_e_s_t правильно, это я и имел ввиду. asio ведь тоже работает на pthread, т.ч. если уж довести слова niXman'а, то asio нагороженный говноко... )))
(PS эт я шучу, можно не отвечать)
0
|
|
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 24.02.2012, 10:08 | |
|
niXman, у Вас наверное какой-то особенный Boost.asio без нитей и _глобального_ (вот где какашка на мой взгляд прячется) мутекса вокруг пуллера?
Вот объясните мне глупому, в чем прелесть даунгрейта бсдешного kqueue до epoll, я понимаю, что авторам boost (равно как и eventlib и большенства прочих событийных тулкитов) это удобно, но в чем мой профит от лишнего сискола на каждое событие? ИМХО любое универсальное решение, априори сливает разработанному под конкретную задачу.
0
|
|
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|||
| 24.02.2012, 12:03 | |||
|
А Вы попробуйте шаблоны усиленно рекламируемого Вами boost почитать, может догадаетесь/поймете как и зачем asio защищает epoll_wait мутексом.
0
|
|||
|
|
|||
| 24.02.2012, 12:08 | |||
|
0
|
|||
| 24.02.2012, 12:08 | |
|
Помогаю со студенческими работами здесь
20
Многопоточность - правильное завершение потоков Многопоточность, как увеличить число потоков Взаимодействие потоков. Многопоточность - как создать динамический массив потоков
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера 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. Пошагово создадим проект для загрузки изображения. . .
|