У меня есть эта Rust программа:Являются ли статические переменные неустойчивыми?
use std::{thread, time};
static mut c:bool = false;
fn main() {
unsafe {
// call some FFI program which sets up signals
c = false;
while !c {
thread::sleep(time::Duration::from_millis(10));
}
}
}
Я дам указатель на c
в какой-то программе FFI, который устанавливает сигналы, которые изменяют c
. Как я могу убедиться, что компилятор не устранит цикл while
, так как он принимает c
никогда не изменится?
C имеет ключевое слово volatile
, которое сообщает компилятору не оптимизировать эти примеры. Как я могу сказать компилятору Rusty то же самое?
(Я пытался прочитать код LLVM IR, но не смог понять, как его понять).
bummer, забыли ключевое слово 'mut', которое, конечно же, имеет решающее значение в этом контексте. Исправлено его, а также добавлен комментарий, где я бы назвал FFI – hansaplast
[Этот reddit thread] (https://www.reddit.com/r/rust/comments/40ewem/what_is_the_rust_equivalent_for_cs_volatile/) может быть полезной. – ljedrz