`boost::asio` - Запретить выполнение определенной функции параллельноC++

Программы на C++. Форум разработчиков
Ответить
Гость
 `boost::asio` - Запретить выполнение определенной функции параллельно

Сообщение Гость »


У меня есть асинхронная функция с обратным вызовом, которая будет использоваться в качестве сопрограммы, точно так же, как в примере из asio: https://github.com/chriskohlhoff/asio/b ... rapper.cpp

В этом примере функция API на основе C read_input обернута async_read_input и может использоваться, например, следующим образом:

co_await async_read_input("Введите свое имя", asio::use_awaitable); Проблема в том, что мой read_input не является потокобезопасным (я вызываю io_context::run из нескольких потоков). Насколько я понимаю, asio::strand должен быть полезен в этом случае, но я не знаю, как это сделать. Если я сделаю что-то вроде

co_await async_read_input("Введите свое имя", asio::bind_executor(strand, asio::use_awaitable)); Насколько я понимаю, он делает нечто противоположное тому, что я хочу, заставляя завершения происходить в определенном порядке, но при этом позволяя read_input выполняться параллельно. И если я использую post/dispatch/defer (что я даже не знаю как/если возможно), я не могу co_await< /код> это. Я все еще хочу co_await его.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»