capypad
0 Tage Serie
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
rust
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