- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- 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