Table of contents
Open Table of contents
1. Tạo luồng (Threads) với spawn
Sử dụng thread::spawn để tạo một luồng thực thi mới chạy song song với luồng chính.
use std::thread;
use std::time::Duration;
fn main() {
thread::spawn(|| {
for i in 1..10 {
println!("Chào từ luồng phụ: {}", i);
thread::sleep(Duration::from_millis(1));
}
});
println!("Chào từ luồng chính!");
}
2. Truyền tin giữa các luồng (Message Passing)
Rust sử dụng khái niệm Channel để các luồng giao tiếp với nhau. Một luồng gửi (Sender) và một luồng nhận (Receiver). Quy tắc là: “Đừng chia sẻ bộ nhớ để giao tiếp; hãy giao tiếp để chia sẻ bộ nhớ”.
use std::sync::msc; // Multiple Producer, Single Consumer
3. Chia sẻ trạng thái (Shared State)
Để nhiều luồng truy cập vào cùng một dữ liệu một cách an toàn, Rust cung cấp cặp đôi:
Arc<T>: Atomically Reference Counted (Phiên bản đa luồng củaRc).Mutex<T>: Mutual Exclusion (Đảm bảo chỉ 1 luồng được sửa dữ liệu tại một thời điểm).
let counter = Arc::new(Mutex::new(0));
Lời kết Bài 20
Chúc mừng bạn đã đi đến cuối hành trình của Series Tự học Rust! Chúng ta đã đi từ những khái niệm cơ bản nhất đến những tính năng phức tạp như xử lý đa luồng.
Rust không phải là một ngôn ngữ dễ học, nhưng công sức bạn bỏ ra sẽ được đền đáp bằng những phần mềm cực kỳ nhanh, an toàn và ổn định. Hành trình phía trước còn rất dài, hãy bắt đầu xây dựng dự án đầu tiên của bạn với Rust ngay hôm nay!
Cảm ơn anh Tuấn và các bạn độc giả đã đồng hành cùng Series này trên tuannda.dev. Chúc các bạn thành công! 🏁🚀🦀