31 lines
		
	
	
		
			690 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			690 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| fn main() {
 | |
|     let thread_num = 32;
 | |
|     let msg_num = 16;
 | |
| 
 | |
|     let (mut main_tx, main_rx) = flume::bounded::<()>(1);
 | |
| 
 | |
|     for _ in 0..thread_num {
 | |
|         let (mut tx, rx) = flume::bounded(1);
 | |
|         std::mem::swap(&mut tx, &mut main_tx);
 | |
| 
 | |
|         std::thread::spawn(move || {
 | |
|             for msg in rx.iter() {
 | |
|                 tx.send(msg).unwrap();
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     for _ in 0..1000 {
 | |
|         let main_tx = main_tx.clone();
 | |
|         std::thread::spawn(move || {
 | |
|             for _ in 0..msg_num {
 | |
|                 main_tx.send(Default::default()).unwrap();
 | |
|             }
 | |
|         });
 | |
| 
 | |
|         for _ in 0..msg_num {
 | |
|             main_rx.recv().unwrap();
 | |
|         }
 | |
|     }
 | |
| }
 |