2016-09-12 7 views
5

このコードで何が問題になっていますか?AtomicUsize :: newを使用すると、const fnsが不安定な機能になる

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'にする必要があります。原子操作は、変更する際に内部の変更を使用します。 mutatingメソッドはすべて、最初の引数(共有参照)として '&self'を使います。 – bluss

+1

ああ、彼らは借りチェッカーに頼る必要はないので、意味があります。 – Timmmm

答えて

9

はい、Rust 1.10の関数の外では関数を呼び出すことはできません。そのためにはまだ安定していない機能が必要です。

あなたはATOMIC_USIZE_INIT(あるいは適切なバリアント)を使用してゼロにアトミック変数を初期化することができます:bluss points outとして

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

static COUNTER: AtomicUsize = ATOMIC_USIZE_INIT; 

fn main() {} 

を、これは可変にする必要はありません。コンパイラが指摘しているように、staticconstの値はSCREAMING_SNAKE_CASEになるはずです。

関連する問題