Tôi đang có một thời gian thực sự khó hiểu về Thuật toán Thứ hai đối với vấn đề Người đọc-Nhà văn. Tôi hiểu khái niệm chung, rằng các nhà văn sẽ được ưu tiên hơn độc giả (độc giả có thể chết đói). Tôi thậm chí hiểu việc thực hiện biến có điều kiện của thuật toán này Reader/Writer Locks in C++. Tuy nhiên, semaphore & thực hiện mutex không có ý nghĩa với tôi. Đây là một ví dụ từ Wikipedia:Giải pháp Thuật toán Thứ hai cho Người đọc-Nhà văn
int readcount, writecount; (initial value = 0)
semaphore mutex 1, mutex 2, mutex 3, w, r ; (initial value = 1)
READER
P(mutex 3);
P(r);
P(mutex 1);
readcount := readcount + 1;
if readcount = 1 then P(w);
V(mutex 1);
V(r);
V(mutex 3);
reading is done
P(mutex 1);
readcount := readcount - 1;
if readcount = 0 then V(w);
V(mutex 1);
WRITER
P(mutex 2);
writecount := writecount + 1;
if writecount = 1 then P(r);
V(mutex 2);
P(w);
writing is performed
V(w);
P(mutex 2);
writecount := writecount - 1;
if writecount = 0 then V(r);
V(mutex 2);
[http://en.wikipedia.org/wiki/Readers-writers_problem][2]
Tôi không hiểu ba ẩn dụ (mutex 3, r và mutex 1) là gì trong khóa đọc. Không phải là một semaphore đủ cho số đọc?
Bạn vui lòng đăng liên kết tới thuật toán hoặc trang Wikipedia để đảm bảo tất cả chúng ta đều đang xem cùng một thứ? – gbulmer