Tôi đang đọc "Trình điều khiển thiết bị Linux phiên bản thứ ba", chương về tính đồng nhất và điều kiện chủng tộc. Có một ví dụ tôi không hoàn toàn hiểu; họ đang nói về một mô hình phổ biến trong lập trình hạt nhân, khi cần bắt đầu hoạt động (fo rexample, chuỗi hạt nhân mới hoặc quy trình người dùng, yêu cầu quá trình hiện tại hoặc hành động dựa trên phần cứng) bên ngoài luồng hiện tại, hãy đợi hoạt động đó hoàn thành. Ví dụ về giải pháp không hiệu quả là:Linux mutexes hạt nhân
struct semaphore sem;
init_MUTEX_LOCKED(&sem);
start_external_task(&sem);
down(&sem);
Sau đó, chúng đề xuất nhiệm vụ bên ngoài để gọi (& sem) khi hoàn thành công việc.
Tôi không hiểu lý do tại sao chúng ta không thể làm điều đó theo cách này:
struct semaphore sem;
down(&sem);
start_external_task(&sem);
Tại sao là cần thiết để tạo mutex trong trạng thái bị khóa và sau đó được các mutex sau khi nhiệm vụ đã được bắt đầu?
Mong muốn được nghe từ bạn! Cảm ơn.
+1, nhưng tôi nghĩ sẽ tốt hơn nếu sử dụng thuật ngữ 'semaphore' thay vì' mutex'. SEMAPHORE: có thể lên/xuống bởi bất kỳ chủ đề nào. MUTEX: có quyền sở hữu, chỉ khóa chủ sở hữu có thể tạo mutex. Trong trường hợp này chúng ta cần sử dụng semaphore, vì mục đích của nó là giao tiếp giữa các chủ đề ... – Vojta
@Vojita: Tôi đồng ý. Tôi đã sử dụng thuật ngữ mutex vì câu hỏi đề cập đến semaphore là một mutex. –