我对使用 strand::wrap 和 strand::post 发帖之间的区别感到迷惑不解?似乎两者都保证序列化,但是如何使用 wrap 序列化而不获得一致的顺序?似乎他们都必须做同样的事情。我什么时候会使用一个?
下面是更详细的伪代码:
mystrand(ioservice);
mystrand.post(myhandler1);
mystrand.post(myhandler2);
这保证了我的两个处理程序即使在线程池中也能按顺序序列化和执行。
现在,这和下面有什么不同?
ioservice->post(mystrand.wrap(myhandler1));
ioservice->post(mystrand.wrap(myhandler2));
好像他们做同样的事情?
为什么要使用一个?我看到两者都使用过,并且正在尝试弄清楚什么时候
一个比另一个更有意义。
最佳答案
wrap
创建一个可调用对象,当被调用时,它将调用 dispatch
在一根绳子上。如果不调用 wrap
返回的对象,什么都不会发生。因此,调用 wrap
的结果就像打电话dispatch
.现在与 post
相比如何? ?根据文档,post
不同于 dispatch
因为它不允许在 post
所在的相同上下文(堆栈帧)中立即调用传递的函数。叫做。
所以wrap
和 post
有两个不同之处:它们的 Action 的即时性,以及它们使用调用者自己的上下文来执行给定函数的能力。
我通过阅读 documentation 得到了这一切.
关于multithreading - ASIO strand::wrap 不是必须按顺序序列化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8466944/