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


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

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

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

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

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

pon4ik ★★★★★ ()

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

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

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

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

Iron_Bug ★★★★ ()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от 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 ★★★ ()
Ответ на: комментарий от 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 ★★★★★ ()
Ответ на: комментарий от anonymous

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

ОК.

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

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

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

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

  • Windows
  • Mac
  • Linux

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

  • *BSD
  • Solaris
  • Haiku

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

Л - логика

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

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

Harald ★★★★★ ()