`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 его.

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