use arrayvec::ArrayString;
use ration::Block;
fn main() {
let mut owned_block: Block<MySingleton> = Block::alloc("/tmp/RATION_SINGLETON").unwrap();
*owned_block = MySingleton {
my_pointerless_string: ArrayString::new(),
};
println!("Starting FizzBuzz 2.0...");
println!("\tNOTE: Sometimes prints \"BuzzFizz\" instead of \"FizzBuzz\".");
let program_start_time = std::time::Instant::now();
{
std::thread::spawn(|| {
thread_a();
});
std::thread::sleep(std::time::Duration::from_millis(1));
std::thread::spawn(|| {
thread_b();
});
}
let mut print_count = 0;
while print_count < 10 {
if owned_block.my_pointerless_string.len() > 0 {
std::thread::sleep(std::time::Duration::from_millis(30));
let seconds_since_start = std::time::Instant::now()
.duration_since(program_start_time)
.as_secs();
println!(
"{}, {} seconds since program start",
owned_block.my_pointerless_string,
seconds_since_start,
);
owned_block.my_pointerless_string.clear();
print_count += 1;
}
}
}
struct MySingleton {
pub my_pointerless_string: ArrayString<8>,
}
fn thread_a() {
let mut local_block: Block<MySingleton> = Block::open("/tmp/RATION_SINGLETON").unwrap();
loop {
std::thread::sleep(std::time::Duration::from_secs(3));
local_block.my_pointerless_string.push_str("Fizz");
}
}
fn thread_b() {
let mut local_block: Block<MySingleton> = Block::open("/tmp/RATION_SINGLETON").unwrap();
loop {
std::thread::sleep(std::time::Duration::from_secs(5));
local_block.my_pointerless_string.push_str("Buzz");
}
}