![]() |
|
Модераторы: feodorv |
![]()
|
|
| null56 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
Всем привет
Возникла задача, а вместе с ней непонимание распределения работы по обслуживанию сокета между потоками. Задача(ключевые моменты): Есть два потока. В первичном создается сокет (accept), далее работа между потоками распределяется: основной (первичный) поток читает данные(recv) из сокета и отправляет в пайп, дочерний поток читает данные из пайпа и оптравляет в сеть через сокет (send). Сокет работает в неблокируемом режиме. В основном потоке дейтсвие приостанавливает select, который будится при появлении данных во внутреннем буфере сокета, в дочернем работа приостанавливается за счет блокируемого чтения из пайпа Приблизительно это выглядит так Поток 1
Поток 2
Что именно заинтересовало: Почему данные отпраляемые из дочернего потока (поток 2), отправляются только при пробуждении первичного потока? иными словами, в дочернем потоке я хоть и делаю send, ощущение такое, что за передачу сетевой подсистеме отправляемых данных отвечает всё равно поток родитель сокета... или я ошибаюсь? Заранее благодарен за помощь, надеюсь вопрос понятен.... |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 1 Всего: 26 |
null56, кто поток блокирует, тот и передает
|
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
а recv и send взаимноблокируемы?
Добавлено через 4 минуты и 3 секунды в смысле получается так, select блокирует send и пока я не выйду из ожидания события, вторичный поток не отработает send? и наоборот |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 1 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
GoldFinch, да, ты прав, каждый поток выполняет свою часть работы по сокету, но идет взаимоисключающая блокировка операций send/recv
спасибо |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |