温馨提示×

rust全局变量能跨线程吗

小樊
81
2024-11-24 03:57:40
栏目: 编程语言

在Rust中,全局变量默认是不可变的(immutable),这意味着它们不能跨线程直接共享。但是,你可以使用MutexRwLock等同步原语来实现线程安全的共享访问。

例如,你可以使用Arc<Mutex<T>>来创建一个跨线程可共享的可变全局变量。Arc(原子引用计数)确保了多个线程可以安全地共享所有权,而Mutex则提供了互斥锁,以确保在同一时间只有一个线程可以访问和修改数据。

下面是一个简单的示例,展示了如何使用Arc<Mutex<T>>创建一个跨线程共享的全局变量:

use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    let shared_data = Arc::new(Mutex::new(0));
    let mut handlers = vec![];

    for i in 0..10 {
        let data_clone = Arc::clone(&shared_data);
        let handler = thread::spawn(move || {
            let mut data = data_clone.lock().unwrap();
            *data += 1;
        });
        handlers.push(handler);
    }

    for handler in handlers {
        handler.join().unwrap();
    }

    println!("Result: {}", *shared_data.lock().unwrap());
}

在这个示例中,我们创建了一个跨线程共享的全局变量shared_data,并在多个线程中对其进行递增操作。通过使用Arc<Mutex<i32>>,我们确保了线程安全和共享访问。最后,我们打印出结果,可以看到所有线程都对全局变量进行了递增操作。

0