Ответ нет .
strand
класс имеет только два атрибута
class io_service::strand
{
public:
// ...
private:
asio::detail::strand_service& service_;
asio::detail::strand_service::implementation_type impl_;
};
impl_
- указатель на strand_impl
:
typedef strand_impl* implementation_type;
В классе strand
также отсутствует пользовательский конструктор копирования. Это strand_impl
, который содержит que, mutex, counter и все, что связано с многопоточностью. И этот материал не изменяется при strand
копировании, поскольку strand
имеет только указатель на него и копируется только указатель (ничего не говоря о ссылке io_service, но эта ссылка, очевидно, не влияет на копию нити)
Следовательно, копия и исходные нити являются логически одинаковыми. Они представляют одного и того же исполнителя.
Это также соответствует моим экспериментам. firstFunction и secondFunction в примере вопроса действительно выполнялись последовательно двумя потоками.