Dzwebs.Net

撰写电脑技术杂文十余年

rust多线程之共享及修改lazy,strut,enum,arc,mutex等的综合应用实例

Admin | 2025-1-26 20:05:00 | 被阅次数 | 221

温馨提示!

如果未能解决您的问题,请点击搜索;登陆可复制文章,点击登陆
use std::sync::{Arc, Mutex};
use std::thread;
// 定义一个枚举类型
enum Color {
    Red,
    Green,
    Blue,
}
// 定义一个结构体类型
struct Shape {
    color: Color,
    sides: u32,
}
// 定义一个静态的 Arc<Mutex<Shape>>
static GLOBAL_SHAPE: once_cell::sync::Lazy<Arc<Mutex<Shape>>> = once_cell::sync::Lazy::new(|| {
    Arc::new(Mutex::new(Shape {
        color: Color::Red,
        sides: 4,
    }))
});
fn main() {
    let mut handles = vec![];
    // 创建多个线程来修改和读取共享数据
    for _ in 0..=3 {
        let shape = Arc::clone(&GLOBAL_SHAPE);
        let handle = thread::spawn(move || {
            // 修改共享数据
            {
                let mut locked_shape = shape.lock().unwrap();
                locked_shape.sides += 1;
                locked_shape.color = Color::Red;
            }
            // 读取共享数据
            let locked_shape = shape.lock().unwrap();
            match locked_shape.color {
                Color::Red => println!("Color: Red"),
                Color::Green => println!("Color: Green"),
                Color::Blue => println!("Color: Blue"),
            }
            println!("Sides: {}", locked_shape.sides);
        });
        handles.push(handle);
    }
    // 等待所有线程完成
    for handle in handles {
        handle.join().unwrap();
    }
    // 主线程读取最终的共享数据
    let locked_shape = GLOBAL_SHAPE.lock().unwrap();
    match &locked_shape.color {
        Color::Red => println!("final color:Red"),
        Color::Green => println!("final color:Green"),
        Color::Blue => println!("final color:Blue"),
    }
    println!("Final Sides: {}", locked_shape.sides);
}
/*记得添加如下的库
[dependencies]
once_cell = "1.19.0"
*/

该杂文来自: 最新技术

上一篇:rust语言之自制Iterator Item的代码示例

下一篇:rust之OnceLock配合static和struct构造计算一次的

网站备案号:

网站备案号:滇ICP备11001339号-7

版权属性:

Copyright 2007-2021-forever Inc. all Rights Reserved.

联系方式:

Email:dzwebs@126.com QQ:83539231 访问统计