capypad
0 Tage Serie
rust / intermediate
Snippet

Verwendung von Arc für Thread-sichere gemeinsame Nutzung

Arc (Atomic Reference Counting) bietet gemeinsame Nutzung über mehrere Threads hinweg. Anders als Rc, das nur für einen einzigen Thread geeignet ist, verwendet Arc atomare Operationen für seine Referenzzählung, was es sicher macht für die gemeinsame Nutzung zwischen Threads. Für veränderbaren Zugriff, kombiniere Arc mit Mutex oder RwLock.

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
25
use std::sync::Arc;
use std::thread;
 
struct Config {
api_url: String,
timeout_secs: u64,
}
 
fn main() {
let config = Arc::new(Config {
api_url: String::from("https://api.example.com"),
timeout_secs: 30,
});
 
let handles: Vec<_> = (0..3).map(|i| {
let config = Arc::clone(&config);
thread::spawn(move || {
println!("Thread {} using API: {}", i, config.api_url);
})
}).collect();
 
for handle in handles {
handle.join().unwrap();
}
}
Erklärung
1
use std::sync::Arc;
Importiert Arc für atomare Referenzzählung
2
let config = Arc::new(Config { ... });
Erstellt Arc-umschlossenes Config geteilt zwischen Threads
3
let config = Arc::clone(&config);
Erhöht Referenzzähler, billiger Pointer-Klon
4
thread::spawn(move || { ... })
Erzeugt Thread der geklontes Arc in Closure verschiebt
5
handle.join().unwrap();
Wartet auf Abschluss aller Threads