Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многопотоковая обработка 
:(
    Опции темы
Airanius
Дата 11.1.2006, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Доброго времени суток!

Помогите в решении вопроса: Написал программу под Винду, которая в три потока обрабатывает входящие данные. Теперь возникла необходимость создать её же под Linux. Сделал разделения потоков с помощью функции fork(), вот только получилось, что общие переменные у каждой нити свои! Подскажите как это обойти, или может нужно по другому организовать многопотоковую обработку? (каждая нить представлена отдельной функцией, но может вызывать общие вспомогательные подпрограммки). Заранее спасибо!

PM MAIL   Вверх
bilbobagginz
Дата 14.1.2006, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



ты не сделал правильное разделение на "потоки": В линуксе между "процессами" и "потоками" есть серьезная разница.
используй библиотеку потоков напр. pthreads ( POSIX threads ) или nptl ( native posix threads library )

используя функции pthread_*
ессно надо связывать с либой при сборке:
Код

gcc -lpthreads my_threads_program.c -o my_threads_program





--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
comcon1
  Дата 20.1.2006, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



Действительно, вызов fork делает совсем не то. Он производит "митоз" программы smile, говоря биологическим языком. Получается две копии программы в памяти, различающихся только PID-ом и PID-ом процесса-родителя.

Далее две эти копии программы выполняются СОВЕРШЕННО НЕЗАВИСИМО. Для того чтобы узнать, в какой из копий программы ты находишься, необходимо проверить, что вернула функция fork(). Если 0, то ты в дочернем процессе. В материнском процессе fork возвращает значение PID-а дочернего процесса. Общаться эти два процесса могут только при помощи сигналов (см. signals.h).

Хотя при создании потока, также запустив top, ты увидишь два процесса. Однако в отличие от предыдущего случая переменные там будут общие smile.

Это сообщение отредактировал(а) comcon1 - 20.1.2006, 16:57


--------------------
PM MAIL   Вверх
bilbobagginz
Дата 24.1.2006, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



comcom1, насчет общения... зависит от характера общения... там можно и через сигналы, через пайпы, и через сокеты разные, и через зашаренную память... имхо конечно.
и есссно, вопрос сколько вся эта коммуникация стоит времени и памяти..

пока.


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1038 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.