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)

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

да можно и выкинуть pthread, #ifdef WIN32-ами обернуть CreateThread или pthread_create()

но на линуксомаках и прочих оставшихся в живых юниксах отказываться от pthread глупо

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

Миллион? Если я ничего путаю, то вдвое меньше. Причём на полторы сотни больше него получает директор The Linux Foundation — маковод.

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

да можно и выкинуть pthread, #ifdef WIN32-ами обернуть CreateThread или pthread_create()

pthread_create()

выкинуть pthread

Не вполне понимаю вашу мысль :) Выкинуть pthread... или выкинуть для оффтопика? pthread_create — это обертка над системоспецифичными колами в том числе и в линуксе. Если выкидывать — то можно и руками клонировать (в образовательных целях... чтоб например, привить нелюбовь так делать проиллюстрировать экономию времени, которая наступает, если использовать что-то более высокоуровневое и кроссплатформенное чем системоспецифичные колы и вилки макросов,  — т.е. показать почему «на линуксомаках и прочих оставшихся в живых юниксах отказываться от pthread глупо» :)))

но на линуксомаках и прочих оставшихся в живых юниксах отказываться от pthread глупо

Ну и в общем, от них можно и не отказываться — хотя прям напрямую юзать их тоже не обязательно без «довольно специфических вкусов» проекта (или изначально онтопичной его направленности).

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

или, если религия позволяет, взять обертку, которая эти вилки уже реализует :) Особенно если профайлер говорит «это неточно» про традиционные вкукареки «оверхед! тормоза!»

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

Миллиардер, плейбой и филантроп. Основатель Vigin, легендарный чувак. Хз под каким камнем ты до сего дня жил, если никогда про него не слышал.

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

а за личность основателя как-то не интересовался особо

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

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

Microsoft добавила эту библиотеку в свой vcpkg

https://github.com/Microsoft/vcpkg/blob/88f6875e0faecb7a5a16f62760edd68ff563a...

Так же эта библиотека собирается и на других компиляторах.

И предустановлена в классический MinGW.

MinGW-w64 сделала форк этой библиотеки https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-librar...

Сборки MinGW-w64 также идут со встроенной поддержкой pthread.

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

Он известен далеко за рамками своего бизнеса. Написал несколько бестселлеров, установил несколько мировых рекордов, один проигрыш пари (ставил на свою команду в F1) и отработка рейса в виде стюардессы чего стоит. Среди гиков должен быть широко известен хотя бы за счёт Virgin Galactic аналогично Маску и Безосу.

WitcherGeralt ★★
()

ТС, скажи преподу что он хипстер, падкий до новых свистелок и перделок и что pthreads не нужен.

Makefile:

all: g p n
a:
	echo "START $@"
	sleep 1
	echo "DONE  $@"
b: a
	echo "    START $@"
	sleep 1
	echo "    DONE  $@"
c: a
	echo "        START $@"
	sleep 1.3
	echo "        DONE  $@"
d: b
	echo "            START $@"
	sleep 1
	echo "            DONE  $@"
e: b
	echo "                START $@"
	sleep 2.2
	echo "                DONE  $@"
f: a
	echo "                    START $@"
	sleep  2.5
	echo "                    DONE  $@"
g: b
	echo "                        START $@"
	sleep 6
	echo "                        DONE  $@"
h: d c
	echo "                            START $@"
	sleep 0.9
	echo "                            DONE  $@"
i: h f
	echo "                                START $@"
	sleep 1.2
	echo "                                DONE  $@"
k: e r i
	echo "                                    START $@"
	sleep 1
	echo "                                    DONE  $@"
m: h f
	echo "                                        START $@"
	sleep 1.3
	echo "                                        DONE  $@"
n: h f
	echo "                                            START $@"
	sleep 2.4
	echo "                                            DONE  $@"
p: k m
	echo "                                                START $@"
	sleep 1
	echo "                                                DONE  $@"
r: c d
	echo "                                                    START $@"
	sleep 1.5
	echo "                                                    DONE  $@"

.PHONY: all a b c d e f g h i k m n p r

запуск:

$ time make -rsj
START a
DONE  a
    START b
        START c
                    START f
    DONE  b
                        START g
                START e
            START d
        DONE  c
            DONE  d
                                                    START r
                            START h
                    DONE  f
                            DONE  h
                                START i
                                        START m
                                            START n
                DONE  e
                                                    DONE  r
                                DONE  i
                                    START k
                                        DONE  m
                                    DONE  k
                                                START p
                                            DONE  n
                                                DONE  p
                        DONE  g

real    0m8.484s
user    0m1.466s
sys     0m0.559s
anonymous
()
Ответ на: комментарий от WitcherGeralt

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

Где, лол?

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

Я, может поверхностно, знаю как управлять самолётом. Если что, разберусь.

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

Типичный айтишник разрабатывает не приходя в сознание

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

Хз под каким камнем ты до сего дня жил, если никогда про него не слышал.

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

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

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

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

При этом он, повторюсь, мнит себя пипец творцом. айтишники, спуститель на землю!

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

тем не менее, у одних айтишников суммарно бывает знаний больше, чем у других айтишников

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

Тогда получается, что институт/университет практически не отличается от совершенно обычного сертификационного центра.

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

На фоне того, как с помощью интернета/соц.сетей люди в течение короткого времени находят единомышленников/с теми же проблемами и организуют сообщества, акции, протесты, такая прежде важная функция университета выглядит довольно незначительной. Но не знаю, как там в элитных универах США, когда туда шли, наверное, как раз в первую очередь за этим.

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

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

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

магия первого, работает. ибо его лекции я помню намного отчетливее.

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

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

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

не преувеличивай значение «жизни онлайн».

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

на меня эта магия как-то не действовала, всё равно приходилось по книгам потом учить

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

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

На самом деле нет. Сложный материал ты хрен поймёшь на лету без книги

deadplace
()

препод решил всех удивить своими познаниями в программировании. Но с нами ими не поделился, только дал задание.

Што, прям таки ни одной лекции и семинара не провел и сразу дал такое задание?! Напишите коллективное письмо в деканат.

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

Нет.

Любой ВУЗ решает по сути две задачи. Первая — учит искать, осмысливать и применять полученную информацию на практике. В процессе деятельности. Вторая — сообщает необходимый минимум знаний, достаточный для решения первой задачи. ВУЗ даже не учит думать. Человек уже сам либо думает, либо нет.

Знания устаревают, так что учиться после ВУЗа придётся в любом случае. Постоянно. Иначе это будет не специалист, а «пенёк, занимающий место». Что-то типа офисной мебели.

«Военный ВУЗ» решает ещё и третью задачу (я про чисто военный, а не про военную кафедру). Но об этом не говорим. Не относится к делу.

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

Это работает лучше когда пишешь не просто слово в слово что сказано, как во втором случае, а когда конспектируешь своими словами.

В принципе и с книгами также, если писать конспект прочитанного, то усваивается намного лучше и качественнее. А если еще и пересказывать кому-то..

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

Всё верно.

что когда слушаешь и пишешь, происходит какая-то магия и изучаемый материал прямо таки врезается в память.

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

Чтобы действительно «врезалось в память», намертво, я бы рекомендовал после занятий, спустя пару часов где-то закрепить полученный материал, просто перечитав лекции и разобрав приведённые примеры самостоятельно, а лучше с друзьями-сокурсниками. В военных ВУЗах для этого в своё время было «сампо» (самоподготовка). Т.е., с утра шли «пары» (лекции, семинары, практика), а после обеда сампо. Материал не в пример лучше усваивается.

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

А ещё, у них у всех есть мизинец на левой ноге. Следовательно, наличие мизинца на левой ноге, значительно повышает шанс стать миллиардером.

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

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

next_time ★★★★★
()
22 мая 2019 г.
Ответ на: комментарий от WitcherGeralt

Я тоже... слышал, но не знал, кто это.

Почитал. Оказывается, его компания приложила руку к становлению Майка Олдфилда и Sex Pistols. Ну что сказать — уже за это его можно поблагодарить.

hobbit ★★★★★
()

средствами POSIX

Не нужно. Есть #include<thread> или #include<threads.h>

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

на нём пишу

Говнокод?

помогает понять, как работает компьюте

Ассемблер x86(и других) не отражает, как реально работают современные процессоры.

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

То что ниже него есть что-то ещё никак не отменяет его собственной низкоуровневости.

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

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

Так сейчас все, кому 30+ наверняка имели опыт с каким-нибудь дерьмом мамонта типа 8051. Только с тех пор, как появились 386-е, прошло некоторое время, и профессия программиста сильно диверсифицировалась. Теперь это вообще бессмысленное понятие без привязки к конкретной области, и в 21м веке делать выводы о нужнности тех или иных людей в программировании только на основе знания ими ассемблера - это как-то странно...

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

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

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

Учил сильно после Си, пригождатется только для того, что нельзя сделать на няшной...

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

однако талант, интеллект и работоспособность в целом распределены равномерно между всеми людьми.

дальше можно не читать

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

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

https://www.sciencealert.com/luck-not-talent-makes-you-rich

shkolnick-kun ★★★★★
()
Последнее исправление: shkolnick-kun (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.