LINUX.ORG.RU

Разработка многопоточного приложения средствами POSIX в ОС Linux

 , ,


2

2

Ребят, учусь в УУМЗ, и препод решил всех удивить своими познаниями в программировании. Но с нами ими не поделился, только дал задание. Помогоите пожалуйста написать код, удовлетворяющий заданию. Вершины графа являются точками запуска/завершения потоков, дугами обозначены сами потоки, длину дуги следует интерпретировать как ориентировочное время выполнения потока. Реализовать последовательно-параллельный запуск потоков в ОС Linux с использованием средств POSIX для запуска и синхронизации потоков. Запрещается использовать какие-либо библиотеки и модули, решающие задачу кроссплатформенной разработки многопоточных приложений (std::thread, Qt Thread, Boost Thread и т.п.). Самостоятельно выделить на графе две группы с выполняющимися параллельно потоками. Первая группа не синхронизирована, параллельное выполнение входящих в группу потоков происходит за счет использования искусственной задержки. Величина задержки должна быть как можно меньше. При выполнении операций ввода-вывода перед входом в критическую секцию потоки должны захватывать мьютекс. Вторая группа синхронизирована семафорами: входящий в групу поток передает управление другому потоку после каждой итерации. Последовательное выполнение потоков должно обеспечиваться за счет использования семафоров. Все потоки должны запускаться одновременно из функции k1_init(), без задержек, один за другим. Использовать функцию pthread_join() разрешается только в функции k1_init() для ожидания завершения работы всех запущенных потоков. Вот этот граф. http://d.radikal.ru/d38/1903/45/c004a55e6571.png


Не ради издевательства, а из здорового интереса: что-то похожее может потреблваться в реальной работе C++ программиста?

rumgot ★★★★★ ()
Ответ на: комментарий от rumgot

Кто бы знал. Преподу, видимо, не потребовалось, раз он у нас преподает..

ishka ()
Ответ на: комментарий от rumgot

Ну, если ты знаешь как из stl аффинити сменить, или каким образом динамическую маршрутизацию построить, то наверное для тебя задание и правда ненужное.

pon4ik ★★★★★ ()
Ответ на: комментарий от ishka

Да, именно, звучит как что-то, что для тебя бесплатно никто делать не станет. Максимум можно поугарать.

Одна надежда - что придёт такой же студент, но ему по фану.

pon4ik ★★★★★ ()

Но с нами ими не поделился, только дал задание.

Подлый препод забанил вас в гугле, библиотеке, удалил все маны и прочую документацию из интернетов? Каков подлец!

Harald ★★★★★ ()
Ответ на: комментарий от pon4ik

кровавая модерастия удалила ни за что его 10 реинкарнаций за один день

Harald ★★★★★ ()
Ответ на: комментарий от annulen

Прямо таки напрямую? Или часто std::thread недостаточно?

UVV ★★★★★ ()
Ответ на: комментарий от slovazap

памперсы нужны только тем, кто ссытся под себя. нормальные люди спокойно работают с phtreads. а для изучения программирования под Linux изучение phtreads - это основы.

Iron_Bug ★★★★★ ()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от annulen

Не знаю, как там в lunux, а везде уже давно есть инструменты, облегчающие работу с потоками в разы — всякие там очереди, фьючерсы с промисами и прочее

deadplace ()
Ответ на: комментарий от annulen

Да там его даже в libc толком реализовать не могут, не говоря уже о том, чтобы с ним по-настоящему уметь работать: use after free in pthread_create. Никто не знал, кто именно в какое именно время владеет определёнными ресурсами при таких базовых операциях как создание/завершение потока.

И ещё другое: много проектов используют pthread_cleanup_push()/pthread_cleanup_pop()? Монстроидальное применение попадалось мне только в vlc.

gag ★★★★★ ()

Запрещается использовать какие-либо библиотеки и модули, решающие задачу кроссплатформенной разработки многопоточных приложений (std::thread, Qt Thread, Boost Thread и т.п.)

Какой-то бред написан.

pthread, это POSIX thread. Внезапно это Portable Operating System Interface. То есть библиотека решающая задачу кроссплатформенной разработки многопоточных приложений

pthread работает и на Linux и на Windows и на *BSD и на Haiku и на много чём ещё...

Препод - неадекват.

fsb4000 ★★★★★ ()
Ответ на: комментарий от Iron_Bug

Для пользы дела лучше взять готовый инструмент, а не изобретать свой, который не факт, что будет лучше работать. В posix тредах проще только запутаться.

deadplace ()
Ответ на: комментарий от ishka

Простите...

Извините что я спрашиваю, но Вы уверены в том, что мы тут являемся сервисом по решению домашних заданий?

Moisha_Liberman ★★ ()
Ответ на: комментарий от deadplace

Согласен.

По теме, ТС, если у тебя нет привычки читать маны, и официальную документацию, то можешь прочитать готовый туториал на пару страниц(13).

Очень кратко, но зато опенсурс книжка, и много времени не потратишь. И у тебя появится часть знаний препода :)

https://riptutorial.com/ebook/pthreads

fsb4000 ★★★★★ ()
Ответ на: комментарий от gag

Оригинально! Браво!

Да там его даже в libc толком реализовать не могут,

Т.е., по ссылке очередное скрипторылое «чудовище» не осилило вкурить как и что, а делается вывод о сломанности pthreads в libc? Забавно, забавно...

много проектов используют pthread_cleanup_push()/pthread_cleanup_pop()?

Внезапно да. А что с ними не так? Что может препятствовать их использованию?

Moisha_Liberman ★★ ()

Но с нами ими не поделился, только дал задание.

Добро пожаловать в университет. Тут это так. Дорогу в библиотеку сам найдёшь? Если нет, спроси у коммилитонов.

Hint: твоя задача научиться учиться. Т.е. найти и обосновать решение самостоятельно.

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от deadplace

студентов учат думать и понимать, как что работает. а если «взять готовый инструмент» - с этим лучше сразу к вебмкакам. там мозг не нужен, кроме спинного. препод правильно гоняет студентов. пусть учатся шевелить извилинами. помогать, я считаю, не стоит. пусть сами пишут свои задания. а то потом будут кретины с дипломами. они никому не нужны.

Iron_Bug ★★★★★ ()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: Оригинально! Браво! от Moisha_Liberman

Re: Оригинально! Браво!

Мне не понятно, зачем оскорблять незнакомых людей.

... а делается вывод о сломанности pthreads в libc?

Из-за этого незнания самими разработчиками, libc функционировала неверно.

gag ★★★★★ ()
Ответ на: комментарий от fsb4000

Препод - неадекват

Нет, ты. pthread никто не относит к кроссплатформенным, ну может только линуксоиды.

anonymous ()

Хорошее задание. Радуйся, что такие дают.

i-rinat ★★★★★ ()
Ответ на: комментарий от anonymous

pthread никто не относит к кроссплатформенным

ОК.

Либа работающая на

  • Windows
  • Mac
  • Linux
  • *BSD
  • Solaris
  • Haiku

не кросплатформенна

Electron работающий на

  • Windows
  • Mac
  • Linux

и не работающий на

  • *BSD
  • Solaris
  • Haiku

относят к кросплатформе.

Л - логика

fsb4000 ★★★★★ ()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от Harald

В последнее время на наличе/отсутствие ВО работодатели нередко забивают.

rumgot ★★★★★ ()
Ответ на: комментарий от deadplace

Людей, могущих в С - мало. Остальные могут идти в грузчики, дворники, тоже полезная работа. Или на node.js писать

Harald ★★★★★ ()
Ответ на: комментарий от Iron_Bug

ОК, как работает процессор i386? Как работает видеокарта/монитор? Как работает радио? Зачем ты ими пользуешься, если не понимаешь?

deadplace ()
Ответ на: комментарий от Harald

О, боже, я думал, что это он.

Считаю, что не каждый разбирается в этом, а пользоваться все смогут.

Ты сам-то сечёшь в радио, например?

deadplace ()
Ответ на: комментарий от deadplace

Ну тебе про что конкретно рассказать, про виды модуляции, про приёмные и передающие устройства, распространение радиоволн, уравнения Максвелла?

Harald ★★★★★ ()
Ответ на: комментарий от Harald

А, ну ок. Значит прочитать в интернете о разных библиотеках, реализующих те же очереди многопоточные для тебя сложно. Самообучаться не умеешь.

deadplace ()
Ответ на: комментарий от deadplace

В posix тредах проще только запутаться.

Как?! Как там можно запутаться?

i-rinat ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.