首页 > 解决方案 > 如何定义一个使用 Mutex 的泛型函​​数?

问题描述

这个简单的函数锁定 af64并更新值

use std::sync::Mutex;

fn bar() {
    let a = Mutex::new(1.0);
    let mut b = a.lock().unwrap();
    *b = 2.0;
    foo(a, 3.0);
}

我想将行为封装到一个函数中,但我不知道如何where为 T 指定子句

fn foo<T, V>(lockable_param: T, value: V)
// where
//    T: Mutex??,
{
    let mut lock = lockable_param.lock().unwrap();
    *lock = value;
}

标签: genericsrust

解决方案


您不需要那么多参数,只需使用Mutex<T>andT参数即可。我认为您将需要接收参考而不是值,因为您没有返回任何内容。这应该有效:

use std::sync::Mutex;

fn bar() {
    let a = Mutex::new(1.0);
    let mut b = a.lock().unwrap();
    *b = 2.0;
    foo(&a, 3.0);
}

fn foo<T>(lockable_param: &Mutex<T>, value: T) {
    let mut lock = lockable_param.lock().unwrap();
    *lock = value;
}

推荐阅读