Должен ли я добавить блокировку к сокету, когда два или более потоков хотят получить к нему доступ? - PullRequest
1 голос
/ 18 марта 2012

Я получаю сокет от функции accept в главном процессе, и два или более потоков могут отправлять данные из него. Тогда доступ к сокету должен быть взаимоисключающим, когда два или более потоков хотят отправлять данные из него параллельно. Моя проблема в том, что ОС добавит блокировку к подключенному сокету в нижней части системы.

1 Ответ

0 голосов
/ 22 марта 2012

Поскольку вы упоминаете accept(), я так понимаю, мы говорим о потоковых сокетах.

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

Если вы отправляете небольшие объемы данных за один раз, которые не приводят к блокировке сокета, вы, вероятно, можете ожидать, что блоки данных будут отправлены каждому одновременному send() / write() позвоните, чтобы прибыть непрерывно на другом конце.НАВЕРНОЕ.Вы не можете рассчитывать на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...