Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Channels in Rust Programming
Channels are a medium that allow communication to take place between two or more threads. Rust provides asynchronous channels that enable communication between threads.
Channels in Rust allow a unidirectional flow of communication between two endpoints. These two endpoints are Sender and Receiver.
Example
Consider the example shown below −
use std::sync::mpsc::{Sender, Receiver};
use std::sync::mpsc;
use std::thread;
static NTHREADS: i32 = 3;
fn main() {
let (tx, rx): (Sender, Receiver) = mpsc::channel();
let mut children = Vec::new();
for id in 0..NTHREADS {
let thread_tx = tx.clone();
let child = thread::spawn(move || {
thread_tx.send(id).unwrap();
println!("thread {} done", id);
});
children.push(child);
}
let mut ids = Vec::with_capacity(NTHREADS as usize);
for _ in 0..NTHREADS {
ids.push(rx.recv());
}
for child in children {
child.join().expect("oops! the child thread stopped working");
}
println!("{:?}", ids);
}
In the above code, we are trying to pass the id of the thread to the other thread via a channel.
Output
When we run the above code, we will see this output:
thread 0 done thread 1 done thread 2 done [Ok(0), Ok(1), Ok(2)]
The output implies that all the threads worked perfectly and the communication was enabled between them via a channel.
Advertisements