Многопоточность в Си?

Все о программировании под *nix
Аватара пользователя
Victor Gr.
Неотъемлемая часть форума
Сообщения: 891
Зарегистрирован: 13 авг 2004, 15:39
Откуда: Минск
Контактная информация:

Многопоточность в Си?

Сообщение Victor Gr. »

Возможно ли в Си использовать многопоточность?

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

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

ГМ, ИМХО вопрос задан категорически неправильно. Мое дилетантское мнение состоит в том, что язык програмирования C не знает ничего про потоки, процессы, io и т.п. прелести жизни ОС... Все это делается стандартными библиотеками...
PS: В вашем случае - начните курить маны скажем с pthread_create
PPS: А еще лучше - почитать что-нить толковое по програамиированию сабж - кажется у Стивенса (могу ошибаться) таки это описано в относительно общем виде, а детали линуксячьей реализации надо искать в более других источниках.
Опыт растет прямо пропорционально выведенному из строя оборудованию

Аватара пользователя
mend0za
Неотъемлемая часть форума
Сообщения: 2332
Зарегистрирован: 30 авг 2002, 12:33
Откуда: Minsk

Сообщение mend0za »

вопрос сформулирован действительно некорректно.

Стивенса читать на этом уровне понимания - бесполезно. К тому же то что выходило на русском (двухтомник Network Programming) про потоки содержит маленькую малоинформативную главу.

http://www.opennet.ru/docs/137.shtml - начните отсюда

http://www.opengroup.org/onlinepubs/000095399/toc.htm - справочная информация
И увидел я зверя, выходящего из тундры. И число его было 3.14159265358979324...

Аватара пользователя
Serj
Неотъемлемая часть форума
Сообщения: 320
Зарегистрирован: 26 июн 2004, 13:48
Откуда: Беларусь, Минск

Сообщение Serj »

Это не к Си, а к Оси (всмысле операционной системы).
Программист - это человек, который сначала долго думает, чтобы потом ничего не делать.

Аватара пользователя
sanitar
Неотъемлемая часть форума
Сообщения: 1116
Зарегистрирован: 28 ноя 2002, 02:23
Откуда: Минск

Сообщение sanitar »

mend0za, у Стивенса была книжка про IPC тоже на русском, там было много.

Человеку нужна все-таки многопоточность или многопроцессность? :wink:
I'll kill this code without a knife -- with only fork().

Аватара пользователя
Victor Gr.
Неотъемлемая часть форума
Сообщения: 891
Зарегистрирован: 13 авг 2004, 15:39
Откуда: Минск
Контактная информация:

Сообщение Victor Gr. »

Возможно и некорректно, т.к. Си я знаю только после Perl и PHP :). Только вчера купил Кернигана Ритчи "Язык программирования Си".

Но вопрос собственно откуда: когда листал книгу по Java - помню, одна из первых глав была посвящена программированию многопоточного приложения.

Serj, Выходит, ОС должна распараллеливать задачу?

Аватара пользователя
sanitar
Неотъемлемая часть форума
Сообщения: 1116
Зарегистрирован: 28 ноя 2002, 02:23
Откуда: Минск

Сообщение sanitar »

Victor Gr., вызывая функции библиотек, ты просишь ОС создать новые потоки/процессы и управлять ими и их взаимоотношениями с родителем.
I'll kill this code without a knife -- with only fork().

Аватара пользователя
mend0za
Неотъемлемая часть форума
Сообщения: 2332
Зарегистрирован: 30 авг 2002, 12:33
Откуда: Minsk

Сообщение mend0za »

Sanitar: да, и ты брал её читать именно у меня :)

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

Аватара пользователя
sanitar
Неотъемлемая часть форума
Сообщения: 1116
Зарегистрирован: 28 ноя 2002, 02:23
Откуда: Минск

Сообщение sanitar »

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

Про потоки там вроде есть, но меньше чем про семафоры -- за давностью лет не помню.
I'll kill this code without a knife -- with only fork().

Аватара пользователя
Serj
Неотъемлемая часть форума
Сообщения: 320
Зарегистрирован: 26 июн 2004, 13:48
Откуда: Беларусь, Минск

Сообщение Serj »

Serj, Выходит, ОС должна распараллеливать задачу?
Не, ну при решении конкретной задачи естественно ты сам выбираешь будет ли задача решаться в одном потоке/процессе или же будут запускаться на выполнение дополнительные потоки/процессы решающие какие-то части задачи одновременно (параллельно).
А вот уже инструменты для создания, управления, синхронизации и обмена данными друг с другом предоставляет операционная система (если конечно ОС многозадачная).
Программист - это человек, который сначала долго думает, чтобы потом ничего не делать.

Аватара пользователя
Victor Gr.
Неотъемлемая часть форума
Сообщения: 891
Зарегистрирован: 13 авг 2004, 15:39
Откуда: Минск
Контактная информация:

Сообщение Victor Gr. »

Я это к тому, что с теперешним замедлением развития процессоров ввысь (наращивания тактовой частоты) и интенсивным развитием вширь (появление двухядерности, двухпроцессорности, Hyper-Threading, двухпроцессоро-двухядерности) нужно думать о конструировании программ с учётом этого.

Роадмапы Intel и AMD однозначно дают понять то, что в будущем никакого намёка даже на одноядерность не будет.

Т.к. ОС трудно самой распараллелить задачу, нужно будет ей помогать.

Аватара пользователя
sanitar
Неотъемлемая часть форума
Сообщения: 1116
Зарегистрирован: 28 ноя 2002, 02:23
Откуда: Минск

Сообщение sanitar »

Т.к. ОС трудно самой распараллелить задачу, нужно будет ей помогать.

Поясни мне глубокомысленность этого утверждения?
Смею предположить что просто версии gcc для многоядерных процев должны включать ключ (оптимизировать для SMP). И ОС будет очень легко распараллеливать задачи.

И само SMP для линуха явление не новое...
I'll kill this code without a knife -- with only fork().

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

Victor Gr., ОС сама и не умеет распараллеливать задачу - это не ее дело, максимум могут каким-то образом распараллеливаться системные функции, но вот уж ваш код - извольте распараллелить сами. Самое трудное - не техническая реализация параллелизма, а маштабирование алгоритма на N испольнительных устройств, причем N может быть заренее не изветно. И рспараллеливание имеет смысл и на однопроцессорных устройствах - т.к. хватает медленных опреаций - тот же io...
Опыт растет прямо пропорционально выведенному из строя оборудованию

Аватара пользователя
Victor Gr.
Неотъемлемая часть форума
Сообщения: 891
Зарегистрирован: 13 авг 2004, 15:39
Откуда: Минск
Контактная информация:

Сообщение Victor Gr. »

Большое спасибо за содержательные и интересные ответы Всем!

У меня ещё вопрос... А gcc в Линуксе полностью ANSI-совместимый?

Ответить