在rust多线程中,如果要使用全局变量,比如统计设备连接数,可不能使用一般的公有变量,而是应该使用原子数。
下面是方法,请多指教:
首先,在main之前进行定义:
//使用原子来计数:变量MYUSERCOUNT记录当前连接的设备数量
use std::sync::atomic::AtomicUsize;
use std::sync::atomic::Ordering;
static MYUSERCOUNT: AtomicUsize = AtomicUsize::new(0);
上述代码中,我使用的变量名称是:MYUSERCOUNT,通过new(0)给其赋值一个初始值为0
接着,可以在多线程代码中,对该变量进行加或减的操作:
MYUSERCOUNT.fetch_add(1, Ordering::SeqCst);//使用原子来计数,加1
println!("当前已连接的设备数:{:?}",MYUSERCOUNT);
MYUSERCOUNT.fetch_sub(1, Ordering::SeqCst);//使用原子来计数,减1
println!("当前已连接的设备数:{:?}",MYUSERCOUNT);
注意哦,fetch_add加的函数,fetch_sub这个是减的函数。