Как убедиться, что метод отправки протокола является потокобезопасным - PullRequest
0 голосов
/ 15 февраля 2012

Я работаю над клиент-серверным приложением TCP, используя протокол IntNReceiver.Сервер принимает несколько TCP-соединений от клиента.Я хотел бы позволить другим потокам использовать метод sendString протокола как на клиенте, так и на сервере.Я попытался использовать синхронизированную очередь, отслеживаемую в отдельном потоке иctor.callFromThread (), чтобы вызвать оттуда sendString.Кажется, это работает, но есть странная задержка около 20 секунд, прежде чем фактическая sendString действительно отправляет строку.Не блокируется, возвращается сразу.Я запустил strace и системный вызов send () определенно задерживается.Как правильно делать такие вещи с витой?

1 Ответ

1 голос
/ 16 февраля 2012

Просто используйте callFromThread непосредственно в качестве очереди. Реактор уже синхронизируется и контролирует его. Везде, где вы хотите позвонить foo.sendString() из нереакторного потока, просто наберите reactor.callFromThread(foo.sendString). Создание дополнительной инфраструктуры для этого (например, ваших собственных синхронизированных очередей) - это просто дополнительный код, который может сломаться - как вы уже обнаружили.

...