
ไพรมิทีฟการซิงโครไนซ์
sync.Mutex, RWMutex, Once, Pool, Map, Cond, การดำเนินการแบบ atomic
1sync.Mutex ใน Go คืออะไร?
sync.Mutex ใน Go คืออะไร?
คำตอบ
sync.Mutex (mutual exclusion lock) คือ primitive การซิงโครไนซ์ที่รับประกันว่ามีเพียง goroutine เดียวเท่านั้นที่สามารถเข้าถึง critical section ได้ในแต่ละครั้ง การเรียก Lock จะบล็อกจนกว่า mutex จะพร้อมใช้งาน และ Unlock จะปลดล็อกให้ goroutine อื่น ใช้เพื่อปกป้องการเข้าถึงข้อมูลที่แชร์ร่วมกันแบบพร้อมกัน
2จะเกิดอะไรขึ้นถ้าเราลืมเรียก Unlock หลังจาก Lock บน sync.Mutex?
จะเกิดอะไรขึ้นถ้าเราลืมเรียก Unlock หลังจาก Lock บน sync.Mutex?
คำตอบ
การลืม Unlock ทำให้เกิด deadlock ที่อาจเกิดขึ้นได้ เพราะ goroutine อื่นจะรอแบบไม่มีกำหนดเพื่อให้ได้ mutex แนวทางที่ดีที่สุดคือใช้ defer เพื่อรับประกันว่า Unlock จะถูกเรียกแม้เกิด panic ให้จับคู่ Lock และ Unlock ในขอบเขตเดียวกันเสมอเพื่อหลีกเลี่ยงการรั่วของล็อก
3ความแตกต่างหลักระหว่าง sync.Mutex และ sync.RWMutex คืออะไร?
ความแตกต่างหลักระหว่าง sync.Mutex และ sync.RWMutex คืออะไร?
คำตอบ
sync.RWMutex อนุญาตให้อ่านพร้อมกันได้หลายตัวผ่าน RLock แต่อนุญาตให้เขียนได้เพียงหนึ่งเดียวแบบเฉพาะตัวผ่าน Lock ซึ่งช่วยเพิ่มประสิทธิภาพในสถานการณ์ที่อ่านบ่อยเพราะตัวอ่านไม่บล็อกซึ่งกันและกัน ใช้ RWMutex เมื่อมีการอ่านบ่อยและการเขียนน้อย
ทำไมต้องใช้ defer กับ Unlock บน sync.Mutex?
ควรเลือก sync.RWMutex แทน sync.Mutex เมื่อใด?
+19 คำถามสัมภาษณ์
หัวข้อสัมภาษณ์ Go อื่นๆ
พื้นฐาน Go
โครงสร้างข้อมูล Go
อินเทอร์เฟซใน Go
การจัดการข้อผิดพลาด
พื้นฐาน Goroutine
Channels
Go Modules
เซิร์ฟเวอร์ HTTP
ไคลเอนต์ HTTP
การเข้ารหัส JSON
Database/SQL
แพ็กเกจ context
Testing
รูปแบบ Concurrency
เฟรมเวิร์กเว็บ Go
การออกแบบ REST API
gRPC
Reflection
การจัดการหน่วยความจำ
การเพิ่มประสิทธิภาพการทำงาน
Generics
Go Design Patterns
Microservices
ความปลอดภัยและการยืนยันตัวตน
Docker & Containerization
Kubernetes Basics
Go ขั้นสูง
การพัฒนา CLI
เชี่ยวชาญ Go สำหรับการสัมภาษณ์ครั้งถัดไป
เข้าถึงคำถามทั้งหมด flashcards แบบทดสอบเทคนิค แบบฝึกหัด code review และตัวจำลองสัมภาษณ์
เริ่มใช้ฟรี