rust / intermediate
Snippet
Thread-Kommunikation mit mpsc-Kanälen
Rusts mpsc (Multiple Producer, Single Consumer) Kanäle ermöglichen sichere Kommunikation zwischen Threads. Der Kanal gibt einen Sender (tx) und Empfänger (rx) zurück. Die spawn-Funktion erstellt einen neuen Thread, und move macht, dass der Closure den Besitz von erfassten Variablen übernimmt. recv() blockiert, bis eine Nachricht empfangen wird.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use std::thread;use std::sync::mpsc;fn main() {let (tx, rx) = mpsc::channel();thread::spawn(move || {let message = String::from("Hello from worker thread!");tx.send(message).unwrap();});let received = rx.recv().unwrap();println!("Main thread received: {}", received);let (tx2, rx2) = mpsc::channel();let handle = thread::spawn(move || {tx2.send(42).unwrap();});handle.join().unwrap();println!("Received number: {}", rx2.recv().unwrap());}
Erklärung
1
let (tx, rx) = mpsc::channel()
Erstellt einen Multi-Producer-Single-Consumer-Kanal, der Transmitter und Empfänger zurückgibt
2
thread::spawn(move || { ... })
Erstellt einen neuen Thread, move-Closure übernimmt den Besitz von tx
3
tx.send(message).unwrap()
Sendet die String-Nachricht durch den Kanal, unwrap behandelt Sendefehler
4
rx.recv().unwrap()
Blockiert und empfängt die Nachricht, unwrap behandelt Kanal-Trennungsfehler
5
handle.join().unwrap()
Wartet auf den Abschluss des erstellten Threads, bevor der Hauptthread fortfährt