![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
Airanius |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 12.11.2005 Репутация: нет Всего: нет |
Доброго времени суток!
Помогите в решении вопроса: Написал программу под Винду, которая в три потока обрабатывает входящие данные. Теперь возникла необходимость создать её же под Linux. Сделал разделения потоков с помощью функции fork(), вот только получилось, что общие переменные у каждой нити свои! Подскажите как это обойти, или может нужно по другому организовать многопотоковую обработку? (каждая нить представлена отдельной функцией, но может вызывать общие вспомогательные подпрограммки). Заранее спасибо! |
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 4 Всего: 317 |
ты не сделал правильное разделение на "потоки": В линуксе между "процессами" и "потоками" есть серьезная разница.
используй библиотеку потоков напр. pthreads ( POSIX threads ) или nptl ( native posix threads library ) используя функции pthread_* ессно надо связывать с либой при сборке:
-------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: нет Всего: 17 |
Действительно, вызов fork делает совсем не то. Он производит "митоз" программы
![]() Далее две эти копии программы выполняются СОВЕРШЕННО НЕЗАВИСИМО. Для того чтобы узнать, в какой из копий программы ты находишься, необходимо проверить, что вернула функция fork(). Если 0, то ты в дочернем процессе. В материнском процессе fork возвращает значение PID-а дочернего процесса. Общаться эти два процесса могут только при помощи сигналов (см. signals.h). Хотя при создании потока, также запустив top, ты увидишь два процесса. Однако в отличие от предыдущего случая переменные там будут общие ![]() Это сообщение отредактировал(а) comcon1 - 20.1.2006, 16:57 |
|||
|
||||
bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 4 Всего: 317 |
comcom1, насчет общения... зависит от характера общения... там можно и через сигналы, через пайпы, и через сокеты разные, и через зашаренную память... имхо конечно.
и есссно, вопрос сколько вся эта коммуникация стоит времени и памяти.. пока. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |