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