Home | Libraries | People | FAQ | More |
Provides serialised handler execution.
class strand
Name |
Description |
---|---|
Request the strand to invoke the given handler. |
|
Get the io_service associated with the strand. |
|
Request the strand to invoke the given handler and return immediately. |
|
Constructor. |
|
Create a new handler that automatically dispatches the wrapped handler on the strand. |
|
Destructor. |
The io_service::strand
class provides the ability
to post and dispatch handlers with the guarantee that none of those handlers
will execute concurrently.
Given:
s
a
meeting completion
handler requirements
a1
which is
an arbitrary copy of a
made by the implementation
b
meeting completion
handler requirements
b1
which is
an arbitrary copy of b
made by the implementation
if any of the following conditions are true:
s.post(a)
happens-before s.post(b)
s.post(a)
happens-before s.dispatch(b)
,
where the latter is performed outside the strand
s.dispatch(a)
happens-before s.post(b)
,
where the former is performed outside the strand
s.dispatch(a)
happens-before s.dispatch(b)
,
where both are performed outside the strand
then asio_handler_invoke(a1,
&a1)
happens-before asio_handler_invoke(b1,
&b1)
.
Note that in the following case:
async_op_1(..., s.wrap(a)); async_op_2(..., s.wrap(b));
the completion of the first async operation will perform s.dispatch(a)
,
and the second will perform s.dispatch(b)
,
but the order in which those are performed is unspecified. That is, you cannot
state whether one happens-before the other. Therefore none of the above conditions
are met and no ordering guarantee is made.
Distinct objects: Safe.
Shared objects: Safe.
Header: boost/asio/strand.hpp
Convenience header: boost/asio.hpp