1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
1 | |
Потоки в linux10.12.2011, 00:44. Показов 9291. Ответов 18
Метки нет (Все метки)
Нужно сделать задание по потокам, посему нужна информация по них. В задании нужно создавать потоки, реализовать обмен данными между потоками, синхронизировать потоки + синхронизировать потоки методом блокирования (не знаю как это).
Следовательно нужна информацию по всему этому, подойдёт хорошая ссылка (я под linux до этого ничего не писал, было бы неплохо найти ресурс с коммандами линукс, такой себе msdn но для линукса ) на информацию по потокам или хотябы перечислите функции, которые понадобятся для всего этого чтобы было легче в гугле искать информацию по них, ну или может у кого пример завалялся на работу нескольких потоков в linux, он тоже в принципе лишним не будет.
0
|
10.12.2011, 00:44 | |
Ответы с готовыми решениями:
18
Потоки в Linux Потоки Posix. C Linux Потоки в Linux. Потоки в Linux |
10.12.2011, 01:06 | 2 |
1
|
Заблокирован
|
|
10.12.2011, 12:38 | 3 |
1
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||||||
10.12.2011, 16:09 [ТС] | 4 | ||||||||||
Так, а как мне создать отдельный поток ? Ну чтобы моя функция main создавала поток который что-то там поделает, а когда завершиться то тогда мой main продолжил работу. Выгуглить данные по созданию потока в линукс на си у меня что-то не получилось, приведите элементарный пример пожалуйста.
Добавлено через 59 секунд В задании указано что я должен создавать поток без передачи ему параметров и без его атрибутной записи, ну что такое первое мне понятно, а вот что такое второе? Добавлено через 4 минуты Также мне нужно синхронизировать потоки с помощью pthread_join(), это как и это зачем (чего там синхронизировать когда первый поток просто ждёт завершения второго ?). Добавлено через 5 минут Выгуглил создание с помощью fork(), но не думаю что это то что мне нужно. Добавлено через 19 минут Нашёл код с непонятным примером, но он у меня не компилируется.
ld returned exit status. Это при том что если пытаться передать в pthread_create мало аргументов то оно ругатеся что их мало значит оно всё же знает что такое pthread_create, так почему же если оно знает сколько ей надо параметров оно потом падает на мороз и выдаёт когда аргументов достаточно что не знает что это такое теперь? Вот странный этот линуксовский компилятор. Функцию start_routline перед main я определил конечно. Добавлено через 10 минут Блин, в этот раз набрал пример с википедии http://ru.wikipedia.org/wiki/POSIX_Threads и всё равно получил ошибку undefined reference to pthread_create, что-то тут не так. Что нужно подключить чтобы эта pthread_create вызывалась нормально? У меня подключены
0
|
Заблокирован
|
|
10.12.2011, 16:43 | 5 |
gcc ... -lpthread ...
1
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
10.12.2011, 16:47 [ТС] | 6 |
LosAngeles, ну почти вовремя, тоже выгуглил буквально минуту назад
0
|
Заблокирован
|
|
10.12.2011, 16:59 | 7 |
для этого гугл не нужен, всё что нужнo для понимания ошибки у тебя уже есть:
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||
10.12.2011, 20:53 [ТС] | 8 | |||||
Вопрос на засыпку: почему pid у двух созданных мною тредов одинаковый и должно ли так быть?
Добавлено через 12 минут Хотя, если быть точным, то в лабе проситься вывести tid созданных процессов, а не pid, может это не опечатка и есть ещё какой-то tid всё же? Добавлено через 2 часа 38 минут Также вот у меня есть задание где один поток считывает данные в массив и передаёт их другому файлу, а для синхронизации этого нужно использовать условную переменную. Так вот о условной переменной я почитал http://linux.vt.tpu.ru/threads/index.html, но мне нужен небольшой пример, ато я не очень понимаю как это всё реализовать.
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
10.12.2011, 21:03 | 9 |
Gepar, gettid будет скорее всего возвращать одинаковые значения, изза того, что в pthreads если не путаю потокие липовые
в качестве идентификации потоков можно использовать pthread_self
0
|
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
|
|
10.12.2011, 23:08 | 10 |
На сколько помню. POSIX хочет, чтобы pid у всех потоков процесса был один и тот же. Поэтому потоки объединяются в группу и pid это идентификатор группы. tid это не опечатка, а идентификатор потока внутри группы. man getpid, gettid.
2
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
11.12.2011, 14:42 [ТС] | 11 |
Ну с pid то ладно, это не столь важно. Другое дело с синхронизацией потоков через переменную (я пока не понял как это вообще применить когда у меня один поток читает данные в массив и передаёт их второму потоку, зачем тут вообще переменная состояния, помоему тут достаточно только семафора) и с тем как передать элементы массива другому потоку чтобы тот их печатал?
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
11.12.2011, 15:02 | 12 |
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
11.12.2011, 17:06 [ТС] | 13 |
Ну я в итоге сделал в main массив и передал его адрес в параметрах создания потока и первому и второму потокам (первый пишет в массив данные, второй их печатает), этого от меня хотели? Но я не могу это назвать передачей данных другому потоку, фактически первая фукнция тупо пишет данные в массив, ей пофиг будет ли что передаваться второму потоку в main или не будет, она только пишет, передаёт данные то уже main в итоге. Ну да пусть пока так, скажут переделать - переделаю.
Остался последний пункт первой лабораторной: написать программный код что реализует блокирование типа "читатели-писатели". Это что, это где, это как? Здесь https://computing.llnl.gov/tutorials/pthreads/ об этом не написано, хотя это наиболее полезная ссылка была, по ней в итоге и разобрался со всем, хотя и на английском, но в итоге гораздо понятнее чем то что написано на русском на других ресурсах.
1
|
11.12.2011, 17:39 | 14 |
1
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||||||
12.12.2011, 02:24 [ТС] | 15 | ||||||||||
villu, вроде и с этим разобрался. Остался только вопрос:
после того как я создал
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
12.12.2011, 13:43 [ТС] | 17 |
niXman, Вы спрашиваете или утверждаете? Хотя судя по гуглу утверждаете, превозмогу лень, запущу виртуалку и добавлю эту строчку в код и буду сдавать лабу тогда. Хотя у меня ещё одна по линуксу осталась: передача сообщений между потоками через каналы, на днях тоже ею займусь, но наверное нужно будет создать отдельную тему если возникнут вопросы.
0
|
14.12.2011, 12:55 | 19 | |||||
Вообще есть pthread для mingw
Добавлено через 18 минут Я пришёл к такому варианту:
0
|
14.12.2011, 12:55 | |
14.12.2011, 12:55 | |
Помогаю со студенческими работами здесь
19
Потоки Posix. C++ Linux Не завершаются потоки в Linux Потоки из Linux под Windows Что такое потоки ввода, потоки вывода? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |