本实例实现以下逻辑:
1、定义了一个全局变量CURRENT_SEQ用于记录序列号
2、另一个全局变量SEQ_VEC用于放置生成的序列号。
3、开了50个线程,每个线程中都对CURRENT_SEQ执行1000次+1操作并将结果放入SEQ_VEC
4、输出SEQ_VEC
代码如下:
use once_cell::sync::Lazy;
use std::sync::atomic::{AtomicUsize, Ordering};
static CURRENT_SEQ: AtomicUsize = AtomicUsize::new(0);
use std::sync::Mutex;
static SEQ_VEC: Lazy<Mutex<Vec<usize>>> = Lazy::new(|| Mutex::new(vec![]));
fn main() {
use std::thread;
let mut handles = vec![];
for _ in 0..50 {
let handle = thread::spawn(|| {
for _ in 0..1000 {
SEQ_VEC
.lock()
.unwrap()
.push(CURRENT_SEQ.fetch_add(1, Ordering::Relaxed));
}
});
handles.push(handle);
}
for handle in handles {
handle.join().expect("handle join panic!");
}
let vec = SEQ_VEC.lock().unwrap();
for seq in &*vec {
print!("{},", seq);
}
}