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



Последнее исправление: ishka (всего исправлений: 1)

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

ну она бывает амплитудная, частотная, фазовая...

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

при амплитудной модуляции амплитуда несущей частоты управляется модулирующим сигналом мЕньшей частоты, при частотной частота несущей меняется пропорционально амплитуде модулирующего сигнала...

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

Не всем нужны многопоточные очереди...

да и pthreads уже достаточно высокоуровневая кросплаформенная абстракция над платформенно-специфичными реализациями потоков

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

Амплитудной модуляции вообще 3 типа бывает, так что вопрос не раскрыт.

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

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

Не всем нужны многопоточные очереди...

Как вариант я назвал очереди, а так бери то, что тебе надо. Библиотек полно, в том числе для C

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

В моём случае...

Например, Вы будете разговаривать с человеком, имевшим в начале 2000-х сертификаты компании Qualcomm по стандарту IS-95A (CDMA 800), BTS 2508/3508, контроллеру QCore 22x.

Да, я секу в радио. При чём здесь это? Как ответ на вопрос «секу ли я (или кто-то другой) в радио» релевантен вопросу ТС, не подскажете?

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

Я даже целью не имел оскорбить.

Я просто офигел, извините! Блин. В тысячах проектов работает, а тут нате вам здрасьте... Аж глаз задёргался.

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

Ну что не понятного? Вот ладно теория. Ты сможешь собрать телевизор включая все компоненты? Или телефон? Или компьютер? Теорию мы все знаем. Изготовить микросхемы, дисплей, корпус из пластмассы или метала? Ты ведь понял, в чем мысль была: мы все используем что-то так или иначе инкапсулирующее внутреннее устройство и взаимодействие. Вот вам свет клином на этом pthread сошелся.

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

Лишняя библиотека - это лишняя зависимость, нужно пердолиться с упаковкой этой зависимости, рекурсивно с её зависимости, библиотека может не работать как надо на какой-то из целевых платформ и прочие сложности. В общем, профит от библиотеки должен перевешивать всё это

Harald ★★★★★
()
Ответ на: В моём случае... от Moisha_Liberman

В моём случае...

Например, Вы будете разговаривать с человеком, имевшим в начале 2000-х сертификаты компании Qualcomm по стандарту IS-95A (CDMA 800), BTS 2508/3508, контроллеру QCore 22x.

А тебя вообще не спрашивали

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

Ты сможешь собрать телевизор включая все компоненты

из деталек с алиэкспресса - почему бы и нет

Изготовить микросхемы,

для этого нужно сложное и дорогое оборудование, но это не повод не знать в общих чертах технологию их производства

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

Лишняя библиотека - это лишняя зависимость, нужно пердолиться с упаковкой этой зависимости, рекурсивно с её зависимости

Существуют всякие там пакетные менеджеры, системы сборки, интеграционные тесты, тебе же известно это всё, да?

C тоже зависит от компилятора. Не лучше ли сразу ELF в машинных кодах писать?

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

Существуют всякие там пакетные менеджеры, системы сборки, интеграционные тесты, тебе же известно это всё, да?

Конечно существуют, и на это всё нужно время. Время - деньги.

C тоже зависит от компилятора. Не лучше ли сразу ELF в машинных кодах писать?

Нет, не лучше

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

а ещё в разных дистрах могут быть в пакетах древние библиотеки, либо с какой-нибудь невключённой фичей...

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

Да проще всё!

Вот вам свет клином на этом pthread сошелся.

Оно и понятно что надо не мозг студням «любить», а прямо сразу так фигаккк — и не смущаясь задать вопрос про системный вызов clone() ибо на фиг нам лишние зависимости!

Правда, с тредами как правило, проще получается, но как видно из треда, по-моему, не все даже ими умеют пользоваться. Сложно ибо. Так-то да, clone() напрямую куда как проще!

Ну и до кучи, чтоб студень прочувствовал, сразу его нагрузить потоками в userspace. Корутины там, зелёные нити... Всё верно, чё... Методика преподавания, «от простого к сложного, от общего к частностям» и всё такое, аууу, где ты?

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

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

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

Ты ведь понял, в чем мысль была: мы все используем что-то так или иначе инкапсулирующее внутреннее устройство и взаимодействие.

ну дак pthread делает именно это

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

Тссс... Не спугните!

А то сейчас внезапно так выяснится что POSIX и, как следствие, POSIX-совместимость гарантируют нам переносимость на уровне исходных кодов. Не бинарных реализаций, а исходных кодов, я подчеркну.

А так-то, pthreads я даже на Texas Instruments cc1310/1350/1352 видел. Правда, там лучше этим не пользоваться ибо размеры. И pthreads там реализованы поверх Task(). Местного такого механизма TI-RTOS. Ну в Линукс они поверх clone() и чё такого?

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

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

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

Конечно существуют, и на это всё нужно время.

Какое время? На своих pthread ты потратишь больше в разы. К тому же тестить тебе придется что с pthread, что без

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

На своих pthread ты потратишь больше в разы.

Я - не потрачу, для меня использование pthread не представляет сложности

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

зачем Win98, тот же RHEL/CentOS если взять, одна сплошная некрофилия в репозиториях

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

Ох, да вы всё успели в своей жизни. Такой профессиональный уровень! Вот она — типичная IT-элита. Куда нам, простым рабочим. Снимаю шляпу!

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

Не просто кроссплатформенный, но ещё и переносимый....

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

я не элита. я обычный профессиональный программист. а вот кто такие те, кто не может осилить pthreads - я хз. но не программисты точно.

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

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

Твое определение тупости - все кто использует технологии новее чем 15 лет назад - тупы. Это все что нужно знать, спасибо.

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

Да нет, вы — элита! Вы — это не рукожопый джун, который зубрит какие-то вечно меняющиеся фреймворки. У вас всё чётко — двадцать лет назад написанная на ассемблере и pthread программа работает и сегодня. А на новеньких фреймворках она через год уже поломается из-за несовместимого изменения в API

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

Гордишься во? Только вот работодатели, кто давно и успешно работают - не дураки. И частенько пробиваются наверх люди вообще изначально не из ИТ. Потому что впахивают, а не короной размахивают.

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

Вообще то не больше чем выпускники вузов.

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

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

Как и тебе. Если ты займешься уборкой улицы, не думай, что для кого-нибудь это будет большой проблемой.

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

двадцать лет назад написанная на ассемблере и pthread программа работает и сегодня

ну, на современных процессорах таки лучше использовать современные инструкции :) плюс системы меняются. но тем не менее, примерно так. плюс тут уже писали, что позикс - это переносимость кода. ну и эффективность. к сожалению, фреймворки имеют один большой минус: жрут ресурсы и тормозят. и чем дольше я всё это наблюдаю - тем хуже оно становится. уже совсем ничтожные приложения могут сожрать гигабайты памяти и весь проц. в целом, тенденция очень нехорошая. а профессионализм падает. я сама проводила собеседования и выпускники ВУЗов сейчас очень слабо подготовлены. поэтому я за то, чтобы студенты сами делали свои задания. а это задание вполне себе интересное. по крайней мере, пока студент его делает - хоть что-то изучит самостоятельно :)

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

у меня с образованием и опытом работы проблем нет. а вот когда откровенные дебилы лезут в программирование - их надо гнать ссаными тряпками.

программирование - это не про «впахивание». программирование - это про умение думать головой.

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

и чему вы радуетесь, что в современном айти жопоручные технологии и трудолюбивые васяны с улицы рулят и педалят? еще ларри уолл писал, что добродетель программиста - лень. компьютер для человека, а не наоборот. а у нас нынче так - сотня вась пишет как умеет, еще сотня под неё как умеет телефоны собирает, а там уже 64 ядра, 64 гига, чтобы тетрис пускать. тьфу, рыночек порешал, а вы и рады служить

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

Вот нет. Веришь? :-) Дело в том, что у меня нет высшего. Но есть знания, которые я получил по большей степени самостоятельно через книги и сеть. И и вот когда я устраивался, мне предложили в два раза больше, чем некоторым с вышкой. Так вот далее я общался с ними и они говорят: нахер будут работать в полную силу, отбудут контра

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

Не закончил выше. Вот полный ответ. Вот нет. Веришь? :-) Дело в том, что у меня нет высшего. Но есть знания, которые я получил по большей степени самостоятельно через книги и сеть. И и вот когда я устраивался, мне предложили в два раза больше, чем некоторым с вышкой. Так вот далее я общался с такими и они говорят: как это им таким с вышками так мало дали, нахер будут работать в полную силу, отбудут контракт и все. Т.е. у них даже не возникает мысли, что может нужно наоборот: пахать и учиться, чтобы через год предложили больше. Они думают: вот есть вышка и все, весь мир им обязан: ходят целый день к этой кофемашине и электронной сигаретой дым пускают. А я вот кем только не работал до ИТ: и подсобником на стройке и электромонтером и грузчиком (программированием и компами с детства занимался в качестве увлечения). И поэтому я знаю цену денег. Я знаю, что бывает разная робота, где херачишь в грязи и получаешь по 120уе. И поэтому я не даю себе права херней на работе страдать или опаздывать: эти 8 часов я пускаю куда нужно.

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

а скока это в абсолютных цифрах

ну и в «два раза» всё равно не повод для гордости, обладателям ВО может светить и в десять раз больше (ну тем, кто не просиживал штаны, а действительно учился), если мы единичные случаи обсуждаем

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