Я экспериментирую с Boost.Asio strand
для сервера, который я пишу и хотел уточнить несколько вещей.
Давайте предположим, что у нас есть SomeClass
с чем-то вроде этого:
void SomeClass::foo()
{
strand_.dispatch(boost::bind(&SomeClass::bar, this));
}
Кроме того, strand
имеет io_service
с несколькими потоками, вызывающими run()
.
В документации по strand::dispatch()
я прочитал, что это гарантирует, что обработчики, отправленные или отправленные через цепочку, не будут выполняться одновременно, и если это выполнено, обработчик может выполнить в этой функции , Что решает, будет ли обработчик выполняться немедленно?
В этом случае с несколькими потоками будет отправлять блок, если несколько потоков io_service одновременно вызовут SomeClass::foo
? Т.е. блок для всех, кроме того, который исполняется. Если так, обработчики выполняются в порядке (порядок, который они назвали dispatch()
)?