170 похожих чатов

Всем привет. У меня вопрос по boost::asio и многопоточности. Есть сервер,

который принимает коннекты. Код клиента примерно такой
https://paste.fedoraproject.org/paste/7vKrpr3Q63UVYsTU8VA3gA

Несколько потоков выполняют io_service.run().

При таком подходя я просто обязан был нарваться на такую ситуацию
https://paste.fedoraproject.org/paste/ruq9105Mnzuk~LDktJ88JA

Т.е. уже был вызван onRead, где таймер отменен, вызван wite и получен колбек onWrite (без ошибок, т.е. отправка прошла успешно). В другом потоке одновременно с этим был получен колбек onTimer без ошибки (т.е. не отменен), где был закрыт сокет. И в потоке с onWrite при попытке чтения из закрытого сокета приложение падает.

Как лучше защититься от этого? Поможет ли в этом случае обернуть все колбеки в strand? Или мьютекс во всех колбеках лочить? Не сильно ли это просадит производительность (сейчас там порядка 10к коннектов)?

1 ответов

5 просмотров

возьми beast. мьютекс убьет производительность всяко, надо аккуратно структурировать и ловко использовать странды в нужных местах

Похожие вопросы

Обсуждают сегодня

$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
И ещё вопрос: можно ли типа как на дос как-то запариться и с помощью прерываний выводить текст, вместо функции printf ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
34
Ладно, ещё тупого спрошу. Код должен банально вывести значение регистра на консоль, на деле же не выводя ничего, просто оставляя нерабочую консоль (открыта, ничего не написан...
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
25
здравствуйте. пытаюсь проверить, содержится ли в десятичном представлении инта некоторая цифра. совершаю: strstr(x, "5") != NULL) получаю ошибку с фото (заведомо неработающий ...
Катя Шевчук🪇
18
Что там вообще с кроссплатформенностью?
🄼🄰🄺🅉🄰🄸
23
Ребята. Этот вопрос мучает меня уже 13 - 15 лет. Почему при валидации в ФормЛистере у поля phone поведение странноватое и отличается от других? А именно, вот набор правил д...
Андрей [aharito] Харитонов
1
Доброй ночи. Вопрос знатокам. Имеется некая таблица, результат которой выведен в DBGrid на форме. И есть форма, с помощью которой можно как добавить запись, так и отредактиров...
Евгений
28
{ char buff = *start; *start = *end; *end = buff; } Из-за этой строчки? Что каждый символ через перем бафф? Как вариант использовать другие со...
Wenks
12
а всё почему? потому что ассемблер в отличии от яву порождает множество пагубных привычек, среди которых например можно отметить использование глобальных переменных для всего ...
Mixail Frolov
35
Кстати, а я вот тут подумал. Допустим, у нас имеется цикл который выполняет огромное количество итераций, но мы хотим, чтобы какие-то действия исполнилось только один раз. В Я...
The Bird of Hermes
23
Карта сайта