小编Dan*_*iel的帖子

c ++ find_if lambda

下面的代码有什么问题?如果struct的第一个memebers == 0,它应该在结构列表中找到一个元素.编译器抱怨lambda参数不是Predicate类型.

#include <iostream>
#include <stdint.h>
#include <fstream>
#include <list>
#include <algorithm>

struct S
{
    int S1;
    int S2;
};

using namespace std;

int main()
{
    list<S> l;
    S s1;
    s1.S1 = 0;
    s1.S2 = 0;
    S s2;
    s2.S1 = 1;
    s2.S2 = 1;
    l.push_back(s2);
    l.push_back(s1);

    list<S>::iterator it = find_if(l.begin(), l.end(), [] (S s) { return s.S1 == 0; } );
}
Run Code Online (Sandbox Code Playgroud)

c++ lambda

35
推荐指数
1
解决办法
7万
查看次数

何时在不同线程上安排“.await”调用 - 以及 tokio 任务何时在线程之间移动

我想了解 Rust 中 tokio 的 async/await 线程模型。我特别想知道 async/await 何时会导致代码在不同线程上执行。

我观察到,在带async fn main注释的#[tokio::main](创建多线程运行时)中运行 async/await/join 代码会在同一线程中执行所有代码。在我开始通过 执行代码之前,我没有看到其他线程被使用tokio::spawn

一些相关文档

任务是调度程序管理的执行单元。生成任务会将其提交给 Tokio 调度程序,然后调度程序确保该任务在有工作要做时执行。生成的任务可以在生成它的同一线程上执行,也可以在不同的运行时线程上执行。任务生成后还可以在线程之间移动。(强调我的)

这表示生成的单个 tokio 任务可以在执行期间在线程之间移动。什么时候会发生这种情况?

还有block_on运行#[tokio::main]函数体的文档

这会在当前线程上运行给定的 future,阻塞直到完成,并产生其解析结果。future 内部产生的任何任务或计时器都将在运行时执行。

这可以理解为除非产生新的任务或计时器,否则给定未来的代码将全部在同一线程上运行。这是我观察到的。

异步 rust 代码是否会在.await连接调用中同时(但不是并行)进行 future,并且仅在tokio::spawn使用时安排在不同的线程上?

文档似乎另有说明,如果是这样,如何决定将执行转移到新线程?

rust rust-tokio

2
推荐指数
1
解决办法
365
查看次数

标签 统计

c++ ×1

lambda ×1

rust ×1

rust-tokio ×1