Rust

Concurrency Basics

Threads, thread::spawn, move closures, channels (mpsc), trait Send & Sync, thread safety

20 คำถามสัมภาษณ์·
Mid-Level
1

ควรใช้ฟังก์ชันใดในการสร้าง thread ใหม่ใน Rust?

คำตอบ

ฟังก์ชัน thread::spawn จากโมดูล std::thread จะสร้าง thread การทำงานใหม่ โดยรับ closure เป็นพารามิเตอร์และคืนค่า JoinHandle ที่ช่วยให้รอ thread ทำงานเสร็จด้วยเมธอด join() ได้ ฟังก์ชันนี้เป็นจุดเริ่มต้นหลักสำหรับการเขียนโปรแกรมแบบ concurrent ที่อิงกับ thread ใน Rust

2

เมธอด join() ที่เรียกบน JoinHandle คืนค่าอะไร?

คำตอบ

เมธอด join() คืนค่า Result<T, E> โดยที่ T คือชนิดข้อมูลที่ closure ของ thread คืนค่า ถ้า thread ทำงานเสร็จตามปกติ จะได้ Ok(ค่า) ถ้า thread เกิด panic จะได้ Err ที่มีข้อมูลของ panic วิธีนี้ช่วยให้ดึงผลลัพธ์ของ thread หรือจัดการข้อผิดพลาดได้อย่างปลอดภัย

3

ทำไมต้องใช้คีย์เวิร์ด move กับ closure ที่ส่งให้ thread::spawn?

คำตอบ

คีย์เวิร์ด move บังคับให้ closure รับ ownership ของตัวแปรที่จับมาแทนการยืม สิ่งนี้จำเป็นกับ thread::spawn เพราะ thread ใหม่อาจมีอายุยืนกว่า scope ที่ประกาศตัวแปร หากไม่มี move คอมไพเลอร์จะปฏิเสธเพราะไม่สามารถรับประกันได้ว่า reference จะยังคงใช้งานได้ตลอดอายุของ thread

4

trait Send ใน Rust มีบทบาทอะไร?

5

trait Sync ใน Rust มีบทบาทอะไร?

+17 คำถามสัมภาษณ์

เชี่ยวชาญ Rust สำหรับการสัมภาษณ์ครั้งถัดไป

เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์

เริ่มใช้ฟรี