Страница 1 из 1

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

Добавлено: 15 фев 2006, 02:36
Victor Gr.
Возможно ли в Си использовать многопоточность?

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

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

Добавлено: 15 фев 2006, 10:51
mend0za
вопрос сформулирован действительно некорректно.

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

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

http://www.opengroup.org/onlinepubs/000095399/toc.htm - справочная информация

Добавлено: 15 фев 2006, 11:04
Serj
Это не к Си, а к Оси (всмысле операционной системы).

Добавлено: 15 фев 2006, 11:10
sanitar
mend0za, у Стивенса была книжка про IPC тоже на русском, там было много.

Человеку нужна все-таки многопоточность или многопроцессность? :wink:

Добавлено: 15 фев 2006, 12:01
Victor Gr.
Возможно и некорректно, т.к. Си я знаю только после Perl и PHP :). Только вчера купил Кернигана Ритчи "Язык программирования Си".

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

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

Добавлено: 15 фев 2006, 12:04
sanitar
Victor Gr., вызывая функции библиотек, ты просишь ОС создать новые потоки/процессы и управлять ими и их взаимоотношениями с родителем.

Добавлено: 15 фев 2006, 14:29
mend0za
Sanitar: да, и ты брал её читать именно у меня :)

только там практически ничего нет про потоки

Добавлено: 15 фев 2006, 14:42
sanitar
mend0za, не поверишь -- покупал в "Академкниге" за свои кровные и до сих пор на полке стоит, правда собакой надгрызенная.

Про потоки там вроде есть, но меньше чем про семафоры -- за давностью лет не помню.

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

Добавлено: 16 фев 2006, 13:23
Victor Gr.
Я это к тому, что с теперешним замедлением развития процессоров ввысь (наращивания тактовой частоты) и интенсивным развитием вширь (появление двухядерности, двухпроцессорности, Hyper-Threading, двухпроцессоро-двухядерности) нужно думать о конструировании программ с учётом этого.

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

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

Добавлено: 16 фев 2006, 14:27
sanitar
Т.к. ОС трудно самой распараллелить задачу, нужно будет ей помогать.

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

И само SMP для линуха явление не новое...

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

Добавлено: 18 фев 2006, 23:19
Victor Gr.
Большое спасибо за содержательные и интересные ответы Всем!

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