2011-10-07 22 views
5

Tôi đang sử dụng đàn (2) trong linux để kiểm soát quyền truy cập vào tài nguyên trong cơ sở dữ liệu homespun, sử dụng cả hai chế độ khóa chia sẻ và độc quyền. Tôi thấy rằng nếu một khóa chia sẻ được cấp, sau đó một quá trình khác cũng có thể nhận được một khóa chia sẻ, bất kể có quá trình bị chặn đang chờ khóa độc quyền. Điều này có nghĩa là đối với một tài nguyên phổ biến với nhiều trình đọc chồng chéo, yêu cầu khóa độc quyền có thể bị bỏ đói trong một thời gian dài, có thể là mãi mãi.Làm thế nào để giữ cho đàn chiên Linux (2) khỏi các yêu cầu khóa độc quyền bị bỏ đói?

Hành vi này không mâu thuẫn với đàn chiên (2) trang người đàn ông, nhưng nó làm tôi ngạc nhiên vì mã này đã hoạt động trong nhiều năm ở FreeBSD và OS-X mà không có vấn đề gì. Tôi đoán là các hệ thống BSD phải thực hiện một số loại hàng đợi để ngăn chặn các khóa độc quyền khỏi đói vĩnh viễn.

Câu hỏi chính của tôi là, có bất kỳ mẹo hoặc mô hình lập trình đơn giản nào để giữ khóa độc quyền của tôi khỏi bị đói không?

Câu hỏi thứ hai, để thỏa mãn sự tò mò của tôi, có ai biết điều này thực sự khác với các hệ thống BSD như tôi nghi ngờ không?

+0

'flock' nhắc tôi về các đoàn lữ hành khóa. –

Trả lời

0

Tôi đã có chính xác cùng một vấn đề trên FreeBSD 7.2 và không tìm thấy cách nào để ngăn chặn nạn đói của nhà văn trên đàn(). Bạn phải chọn phương pháp khóa khác, như SysV IPC hoặc tệp dừng cờ đơn giản.

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