Boost.Asio асинхронный TCP-клиент и многопоточность - PullRequest
0 голосов
/ 09 декабря 2010

Мое приложение - это TCP-клиент, очень похожий на пример .

* клиента чата *1001* Boost.Asio.

Я добавляю несколько отдельных потоков, которые вызывают chat_client :: write. Значит ли это, что мне нужно добавить механизм блокировки в do_write или handle_write? есть ли рекомендуемый метод?

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010

Нет, вам не нужно блокировать его в этом случае (в общем).События будут обрабатываться только из потоков, в которых работает io_service.Если это только один, блокировка не требуется.Функция post () для новых сообщений в io_service уже поточнобезопасна для нескольких вызывающих потоков.

В вашем конкретном примере вы можете использовать значение chat_message вместо by-reference, либовыйдите из области видимости в ветке post () перед использованием в потоке io_service.

1 голос
/ 09 декабря 2010

Если вам понадобится какая-то блокировка из-за общих ресурсов или чего-то еще, вы должны взглянуть на strands .

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