หัวข้อสำคัญของ Rust
Rust Arc and Mutex
Let several threads change one value safely: Arc shares it, Mutex guards it.
สิ่งที่คุณจะได้เรียนรู้
- Mutex and lock
- Arc::clone
- Why the count is always right
4 threads x 1000 increments
- 1
Arc::cloneeach thread gets a handle - 2
lock()one at a time - 3
*value += 1safe update - 4
4000always
One lock, many owners
When threads must change the same value, a Mutex makes sure only one of them touches it at a time. Arc lets every thread own a handle to that Mutex.
Arc::clone gives each thread its own handle to the same counter. lock waits until no other thread holds the lock and returns a guard; the lock is released when the guard goes out of scope. Four threads each add 1000, so the result is always 4000.
ประเด็นสำคัญ
- lock gives one thread access at a time.
- The lock is released when the guard goes out of scope.
- Arc lets every thread own a handle.
ตัวอย่าง Rust ที่รันได้
Rust
main.rs
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let counter = Arc::new(Mutex::new(0));
let mut handles = Vec::new();
for _ in 0..4 {
let counter = Arc::clone(&counter);
handles.push(thread::spawn(move || {
for _ in 0..1000 {
let mut value = counter.lock().unwrap();
*value += 1;
}
}));
}
for handle in handles {
handle.join().unwrap();
}
println!("final count: {}", *counter.lock().unwrap());
}
final count: 4000ฝึกฝน
เปิดตัวอย่างในคอมไพเลอร์ออนไลน์ ลองเปลี่ยนค่าหรือเพิ่มบรรทัด แล้วทายผลลัพธ์ก่อนกดรัน จากนั้นลองทำให้โค้ดผิดโดยตั้งใจ แล้วอ่านข้อความจากคอมไพเลอร์
เรียนบทนี้จบแล้วใช่ไหม
ทำเครื่องหมายว่าเรียนแล้วเพื่อติดตามความคืบหน้า
ความคืบหน้าของคุณถูกบันทึกไว้ในเบราว์เซอร์นี้ เข้าสู่ระบบเพื่อเก็บไว้ใช้ได้ทุกอุปกรณ์
ฝึกด้วยโจทย์
ใช้สิ่งที่เรียนในบทนี้แก้ปัญหาจริง ทุกโจทย์รันในเบราว์เซอร์ พร้อมการทดสอบทันทีและรีวิวจาก AI
โจทย์ทั้งหมด