Go

Primitive đồng bộ hóa

sync.Mutex, RWMutex, Once, Pool, Map, Cond, các phép toán atomic

22 câu hỏi phỏng vấn·
Mid-Level
1

sync.Mutex trong Go là gì?

Câu trả lời

Một sync.Mutex (mutual exclusion lock) là một primitive đồng bộ hóa đảm bảo chỉ một goroutine có thể truy cập critical section tại một thời điểm. Gọi Lock sẽ chặn cho đến khi mutex khả dụng, và Unlock giải phóng nó cho các goroutine khác. Dùng để bảo vệ truy cập đồng thời vào dữ liệu dùng chung.

2

Điều gì xảy ra nếu chúng ta quên gọi Unlock sau Lock trên một sync.Mutex?

Câu trả lời

Quên Unlock tạo ra một deadlock tiềm ẩn vì các goroutine khác sẽ chờ vô thời hạn để giành được mutex. Thực hành tốt nhất là dùng defer để đảm bảo Unlock sẽ được gọi ngay cả khi xảy ra panic. Luôn ghép cặp Lock và Unlock trong cùng một scope để tránh rò rỉ lock.

3

Sự khác biệt chính giữa sync.Mutex và sync.RWMutex là gì?

Câu trả lời

sync.RWMutex cho phép nhiều lượt đọc đồng thời qua RLock nhưng chỉ một lượt ghi độc quyền qua Lock. Điều này cải thiện hiệu năng cho các tình huống đọc nhiều vì các reader không chặn lẫn nhau. Dùng RWMutex khi đọc thường xuyên và ghi hiếm khi xảy ra.

4

Tại sao dùng defer với Unlock trên một sync.Mutex?

5

Khi nào nên ưu tiên sync.RWMutex hơn sync.Mutex?

+19 câu hỏi phỏng vấn

Nắm vững Go cho lần phỏng vấn tiếp theo

Truy cập tất cả câu hỏi, flashcards, bài kiểm tra kỹ thuật, bài tập code review và mô phỏng phỏng vấn.

Bắt đầu miễn phí