如何定义采用Mutex <t>的泛型函数?

时间:2018-12-23 17:01:42

标签: generics rust

此简单函数可锁定f64并更新值

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);
}

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

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

1 个答案:

答案 0 :(得分:1)

您不需要太多参数,只需使用Mutex<T>T作为参数。我想您将需要接收一个引用而不是一个值,因为您什么都不返回。这应该起作用:

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;
}