`boost::asio` - Запретить выполнение определенной функции параллельно ⇐ 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 его.
У меня есть асинхронная функция с обратным вызовом, которая будет использоваться в качестве сопрограммы, точно так же, как в примере из 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 его.
Мобильная версия