1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
let mut sys_time = SystemTime::now();
println!("DEBUG {}",sys_time.duration_since(UNIX_EPOCH).unwrap().as_nanos());
let mut cpt :u16 = 0;
let mut vectorhandle = Vec::new();
let donnees = Arc::new((Mutex::new(cpt),Condvar::new()));
for threadid in 0..MAXTHREADS
{
let clone_donnees = Arc::clone(&donnees); // copier les données dans le bloc
let threadhandle = thread::spawn
(
move ||
{
let (verrou,cvar) = &*clone_donnees; // récupérer les données empaquetées dans Arc
let mut donnees = verrou.lock().unwrap();
*donnees+=1;
let mut threadid= donnees.clone() as usize;
println!("Thread {} waiting...",threadid);
cvar.wait(donnees).unwrap();
println!("[{}] Launched !!",threadid);
}
);
vectorhandle.push(threadhandle);
}
let (verrou,cvar) = &*donnees;
let mut donnees= verrou.lock().unwrap();
// Signifier aux threads qu'ils peuvent se lancer...
cvar.notify_all();
thread::sleep(Duration::from_secs(MAXTHREADS as u64)); |
Partager