2016-09-12 40 views
5

這段代碼有什麼問題?使用AtomicUsize時,const fns是一個不穩定的功能:: new

use std::sync::atomic::AtomicUsize; 

static mut counter: AtomicUsize = AtomicUsize::new(0); 

fn main() {} 

我得到這個錯誤:

error: const fns are an unstable feature 
--> src/main.rs:3:35 
    |> 
3 |> static mut counter: AtomicUsize = AtomicUsize::new(0); 
    |>         ^^^^^^^^^^^^^^^^^^^ 
help: in Nightly builds, add `#![feature(const_fn)]` to the crate attributes to enable 

的文檔提到的其他原子INT尺寸是不穩定的,但AtomicUsize顯然是穩定的。

這樣做的目的是得到一個原子每進程計數器。

+3

原子不需要,也不應該在'static mut'中,它應該是一個普通的'static'。原子操作在修改它們時使用內部可變性。你會發現他們所有的變異方法都使用'&self'作爲第一個參數(一個共享引用)。 – bluss

+1

啊,這是有道理的,因爲他們不需要依賴借閱檢查器。 – Timmmm

回答

9

是的,您不能在Rust 1.10以外的函數之外調用函數。這需要一個不穩定的功能:恆定功能評估。

可以初始化原子變量使用ATOMIC_USIZE_INIT爲零(或相應的變體):

use std::sync::atomic::{AtomicUsize, ATOMIC_USIZE_INIT}; 

static COUNTER: AtomicUsize = ATOMIC_USIZE_INIT; 

fn main() {} 

由於bluss points out,沒有必要做出這種改變的。正如編者指出的,staticconst的值應該在SCREAMING_SNAKE_CASE

相關問題