2013-08-18 29 views
7

AFAIK, API mutex được giới thiệu với hạt nhân sau LDD3 (trình điều khiển thiết bị Linux phiên bản thứ 3) được viết nên nó không được mô tả trong cuốn sách.Biến thể khóa mutex nào tôi nên sử dụng trong hạt nhân Linux đang phát triển?

Cuốn sách mô tả cách sử dụng API semaphore của hạt nhân cho chức năng mutex.

Nó đề nghị sử dụng down_interruptable() thay vì down():

Bạn không, như một quy luật chung, muốn sử dụng hoạt động noninterruptible trừ khi có thực sự là không có thay thế. hoạt động không ngắt được là một cách tốt để tạo ra các quy trình unkillable (sợ hãi “D trạng thái” nhìn thấy trong ps), và làm phiền người dùng của bạn [Linux Device Drivers 3rd ed]

Now. đây là câu hỏi của tôi:

API mutex có hai chức năng "tương tự": mutex_lock_killable() an mutex_lock_interruptable(). Tôi nên chọn cái nào?

Trả lời

9

Sử dụng chức năng mutex_lock_interruptible() để cho phép trình điều khiển của bạn bị gián đoạn bởi bất kỳ tín hiệu nào. Điều này ngụ ý rằng cuộc gọi hệ thống của bạn nên được viết để có thể khởi động lại. (Xem thêm ERESTARTSYS.)

Sử dụng mutex_lock_killable() cho phép lái xe của bạn bị gián đoạn chỉ bởi tín hiệu mà thực sự giết chết quá trình, ví dụ, khi quá trình này không có cơ hội để nhìn vào kết quả của cuộc gọi hệ thống của bạn, hoặc thậm chí để thử lại.

Sử dụng mutex_lock() khi bạn có thể đảm bảo rằng mutex sẽ không được giữ trong một thời gian dài.

+0

Bất kỳ ý tưởng nào tại sao biến thể này (có thể giết) không tồn tại trên API semaphore? – stdcall

+0

Không ai cảm thấy cần phải thực hiện điều này bởi vì các semaphores không được sử dụng rộng rãi. –

Các vấn đề liên quan