| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Многопотоковая обработка |
| Автор: Airanius 11.1.2006, 08:27 |
| Доброго времени суток! Помогите в решении вопроса: Написал программу под Винду, которая в три потока обрабатывает входящие данные. Теперь возникла необходимость создать её же под Linux. Сделал разделения потоков с помощью функции fork(), вот только получилось, что общие переменные у каждой нити свои! Подскажите как это обойти, или может нужно по другому организовать многопотоковую обработку? (каждая нить представлена отдельной функцией, но может вызывать общие вспомогательные подпрограммки). Заранее спасибо! |
| Автор: bilbobagginz 14.1.2006, 16:48 | ||
| ты не сделал правильное разделение на "потоки": В линуксе между "процессами" и "потоками" есть серьезная разница. используй библиотеку потоков напр. pthreads ( POSIX threads ) или nptl ( native posix threads library ) используя функции pthread_* ессно надо связывать с либой при сборке:
|
| Автор: comcon1 20.1.2006, 16:57 |
| Действительно, вызов fork делает совсем не то. Он производит "митоз" программы Далее две эти копии программы выполняются СОВЕРШЕННО НЕЗАВИСИМО. Для того чтобы узнать, в какой из копий программы ты находишься, необходимо проверить, что вернула функция fork(). Если 0, то ты в дочернем процессе. В материнском процессе fork возвращает значение PID-а дочернего процесса. Общаться эти два процесса могут только при помощи сигналов (см. signals.h). Хотя при создании потока, также запустив top, ты увидишь два процесса. Однако в отличие от предыдущего случая переменные там будут общие |
| Автор: bilbobagginz 24.1.2006, 12:43 |
| comcom1, насчет общения... зависит от характера общения... там можно и через сигналы, через пайпы, и через сокеты разные, и через зашаренную память... имхо конечно. и есссно, вопрос сколько вся эта коммуникация стоит времени и памяти.. пока. |