提问人:ixolius 提问时间:11/10/2023 更新时间:11/10/2023 访问量:60
相当于 tokio 任务的 Condvar
Equivalent of Condvar for tokio tasks
问:
我正在使用依赖于运行时的框架,并且无法使用运行时的变体。
我还使用外语界面,这给了我一些关于线程的限制:我有一个资源,每个线程只能存在一次,否则我冒着未定义行为的风险。tokio
current_thread
目前,我正在解决这样的问题:
async fn use_the_resource(parameter: String,....) {
while resource_exists_on_thread() {
tokio::task::yield_now().await;
}
resource = create_resource(); //this will lead to undefined behavior, if a resource exists on the same thread
use_resource(resource, parameter,...);
}
但这似乎不是最佳解决方案。我想要一种类似于 的机制,但用于任务而不是线程。这将允许我让任务等到我的资源可用。我不能真正使用 ,因为我不控制线程的创建。std::sync::Condvar
Mutex
答:
0赞
Yoric
11/10/2023
#1
我相信你要找的是 https://docs.rs/tokio/latest/tokio/sync/struct.Notify.html。
会片段大致翻译为:
async fn use_the_resource(parameter: String, ...) {
resource_used_by_thread.await;
resource = create_resource(...);
use_resource(&resource, parameter, ...);
}
评论
1赞
Chayim Friedman
11/10/2023
除了。。。可以将任务移动到不同的线程之后,然后您将拥有 UB。Notify
评论
wait_until
Condvar
tokio::spawn_blocking