gpt4 book ai didi

multithreading - ASIO strand::wrap 不是必须按顺序序列化吗?

转载 作者:行者123 更新时间:2023-12-04 06:38:48 25 4
gpt4 key购买 nike

我对使用 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 所在的相同上下文(堆栈帧)中立即调用传递的函数。叫做。

所以wrappost有两个不同之处:它们的 Action 的即时性,以及它们使用调用者自己的上下文来执行给定函数的能力。

我通过阅读 documentation 得到了这一切.

关于multithreading - ASIO strand::wrap 不是必须按顺序序列化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8466944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com