スレッド自体はProducerとConsumerで同時に走ってるんだけど、なんか全然違うなぁ…
pub static SIZE: u32 = 5;
static slot: Mutex<Vec<i32>> = Mutex::new(Vec::new());
fn work() {
for i in 0..10 {
let producer_handle = thread::spawn(move || {
if slot.lock().unwrap().len() < SIZE.try_into().unwrap() {
slot.lock().unwrap().push(1);
println!("Producer {} work: {:?}", i, slot);
thread::sleep(Duration::from_millis(500));
} else {
for j in 0..5 {
if slot.lock().unwrap()[j] == 0 {
slot.lock().unwrap()[j] = 1;
println!("Producer {} work: {:?}", i, slot);
thread::sleep(Duration::from_millis(500));
}
}
}
});
let consumer_handle = thread::spawn(move || {
if slot.lock().unwrap().len() > 0 {
if slot.lock().unwrap()[0] == 1 {
slot.lock().unwrap()[0] = 0;
thread::sleep(Duration::from_millis(700));
println!("Consumer {} work: {:?}", i, slot);
} else if slot.lock().unwrap()[0] == 1 {
slot.lock().unwrap()[1] = 0;
thread::sleep(Duration::from_millis(700));
println!("Consumer {} work: {:?}", i, slot);
}
}
});
producer_handle.join().unwrap();
consumer_handle.join().unwrap();
}
}
fn main() {
work();
println!("{:?}", slot);
}
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.31s
Running `target/debug/parallel`
Producer 0 work: Mutex { data: [1], poisoned: false, .. }
Producer 1 work: Mutex { data: [0, 1], poisoned: false, .. }
Consumer 1 work: Mutex { data: [0, 1], poisoned: false, .. }
Producer 2 work: Mutex { data: [0, 1, 1], poisoned: false, .. }
Producer 3 work: Mutex { data: [0, 1, 1, 1], poisoned: false, .. }
Producer 4 work: Mutex { data: [0, 1, 1, 1, 1], poisoned: false, .. }
Producer 5 work: Mutex { data: [0, 1, 1, 1, 1], poisoned: false, .. }
Consumer 5 work: Mutex { data: [0, 1, 1, 1, 1], poisoned: false, .. }
Producer 6 work: Mutex { data: [1, 1, 1, 1, 1], poisoned: false, .. }
Producer 7 work: Mutex { data: [1, 1, 1, 1, 1], poisoned: false, .. }
Consumer 7 work: Mutex { data: [1, 1, 1, 1, 1], poisoned: false, .. }
Producer 8 work: Mutex { data: [1, 1, 1, 1, 1], poisoned: false, .. }
Consumer 8 work: Mutex { data: [1, 1, 1, 1, 1], poisoned: false, .. }
Producer 9 work: Mutex { data: [1, 1, 1, 1, 1], poisoned: false, .. }
Consumer 9 work: Mutex { data: [1, 1, 1, 1, 1], poisoned: false, .. }