Tại sao năm triết gia ăn uống?


18

Tôi đã tự hỏi tại sao vấn đề triết gia ăn uống dựa trên một trường hợp năm triết gia. Tại sao không phải bốn?

Tôi đoán rằng chúng ta có thể quan sát tất cả các vấn đề khó chịu có thể xảy ra khi thảo luận về năm ví dụ của các nhà triết học khi chúng ta được đưa ra bốn nhà tư tưởng. Có phải chỉ vì một lý do lịch sử sau đó?


1
Vấn đề ban đầu được Dijkstra mô tả vào năm 1965 và được gọi là Nhóm ăn uống (được tìm thấy trong các ghi chú ở đầu trang 3).

Tôi dường như nhớ việc học aobut bốn nhà triết học ăn uống ...
Michael Borgwardt

16
Đó là 5 triết gia bởi vì anh ta đang cố gắng xem liệu có ai sẽ nhận ra điều hiển nhiên không; 5 nhà triết học sẽ cùng nhau nói chuyện cho đến khi nhà hàng đuổi họ ra, họ thậm chí sẽ không bao giờ lấy đồ dùng bằng bạc của họ. 4 có thể nghỉ trong cuộc trò chuyện đủ lâu để họ bắt đầu ăn. Với 5 ngay khi bất kỳ hai người dừng nói chuyện trong giây lát, đã có một người xếp hàng chờ đợi để xen vào để đảm bảo tính liên tục.
Jimmy Hoffa

1
@Jimmy Hoffa - + 1. Và tại sao điều đó không trả lời?
SChepurin

Câu trả lời:


17

Theo những gì được viết trong EWD 310 "Thứ tự phân cấp các quy trình tuần tự" , có vẻ như số 5 đã được chọn cho mục đích giáo dục, để giúp học sinh hiểu thuật toán được thiết kế để giải thích vấn đề dễ dàng hơn.

Chính bài viết này hỗ trợ thêm cho ý tưởng rằng 5 không thực sự liên quan đến vấn đề chung, trước tiên bằng cách tuyên bố rõ ràng rằng "vấn đề có thể đã được đặt ra cho 9 hoặc 25 triết gia ..." và tiếp theo, bằng cách trình bày nó theo hai khía cạnh hoạt động đồng thời các thực thể, "lớp A và lớp B, chia sẻ cùng một tài nguyên ..."

Giải pháp được Dijkstra sử dụng giới thiệu ba "trạng thái của triết gia": suy nghĩ, ăn uống, đói khát. Mã được trình bày để giải quyết vấn đề, vận hành ba trạng thái này, cùng với số lượng các nhà triết học không liên quan .

Tác giả đã chọn số lượng triết gia 2, 3 hoặc 4, điều này có thể gây nhầm lẫn cho các sinh viên đọc mã, cho dù số được chọn có liên quan đến số lượng trạng thái hay cái gì khác. Điều này có thể dễ dàng được kiểm tra bằng cách cố gắng số nêu trong mô tả trích dẫn từ EWD310 dưới đây: lưu ý ví dụ như thế nào điều này sẽ thay đổi [0:4]để [0:3], [0:2], [0:1]và các báo cáo liên quan đến mod.

Trái ngược với điều này, số 5 trông khá ngây thơ và không viện dẫn các hiệp hội không cần thiết. Người ta có thể nói rằng nó đã được chọn để minh họa rõ hơn rằng số lượng các nhà triết học là, tốt, tùy ý .


Thuật toán được đề cập được trình bày trong EWD 310 như sau:

... chúng tôi liên kết với mỗi triết gia một biến trạng thái, "C" nói, trong đó

C[i] = 0có nghĩa là: triết gia iđang suy nghĩ

C[i] = 2có nghĩa là: triết gia iđang ăn.

...

chúng tôi giới thiệu cho lần chuyển đổi cuối cùng một trạng thái trung gian

C[i] = 1có nghĩa là: triết gia iđang đói

Bây giờ mỗi triết gia sẽ đi theo chu kỳ thông qua các trạng thái 0, 1, 2, 0 ...... Câu hỏi tiếp theo cần đặt ra là: khi nào sự chuyển đổi (nguy hiểm) từ 1 sang 2 diễn ra đối với triết gia K?

...

Trong vũ trụ, chúng ta giả sử tuyên bố

1) semaphore mutex, ban đầu = 1

2) integer array C[0:4], với ban đầu tất cả phần tử = 0

3) semaphore array prisem[0:4]với ban đầu tất cả các yếu tố = 0

4) procedure test (integer value K);

if C[(K-1) mod 5] ≠ 2 and C[K]= 1
    and C[(K+1) mod 5] ≠ 2 do
      begin C[K]:= 2; V(prisem[K]) end;

(Quy trình này, giải quyết sự không ổn định Kkhi có mặt, sẽ chỉ được gọi từ trong một phần quan trọng).

Trong vũ trụ này, cuộc sống của triết gia wbây giờ có thể được mã hóa

cycle begin think;
            P (mutex);
               C[w]:= 1; test (w);
            V(mutex);
            P(prisem[w]); eat
            P(mutex);
               C[w]:= 0; test [(w+l) mod 5];
               test [(w-1) mod 5];
            V(mutex)
      end

Và điều này kết luận giải pháp tôi đang nhắm đến ...


2
Tôi có thể không phải là một triết gia sau đó, bởi vì tôi có thể suy nghĩ cùng một lúc khi ăn hoặc đang đói. Và hơn thế nữa: không ai trong số họ đang uống hoặc thậm chí nói chuyện.
ott--

5

Chỉ Dijkstra có thể trả lời chắc chắn nhưng tôi sẽ đủ tự tin rằng nó tùy tiện.

"Ban đầu nó được Edsger Dijkstra xây dựng vào năm 1965 như là một bài tập cho học sinh, được trình bày dưới dạng các máy tính cạnh tranh để truy cập vào các thiết bị ngoại vi ổ băng. Ngay sau đó, Tony Hoare đã đưa ra vấn đề về công thức hiện tại của nó."

http://en.wikipedia.org/wiki/Dining_philosophftimeprobols


2
Hãy xem xét vấn đề của bốn thực khách so với năm. Vấn đề thay đổi như thế nào? Là dễ hơn hay khó hơn? Đây là một câu hỏi thi - câu hỏi khó hơn có thể là câu hỏi mong muốn.

2

Bởi vì nó kỳ quặc, thậm chí không. Vì vậy, bạn không cố gắng tạo ra một thuật toán dựa trên sự đối xứng hoặc hình thành các cặp và chỉ sau đó nhiều người mới nhận ra rằng nó không hoạt động cho trường hợp chung.

Đây là một ý kiến; Tôi không có kiến ​​thức lịch sử về những gì vượt qua tâm trí của tác giả.


Điểm này là rất quan trọng. Với bốn triết gia, hai cặp trong số họ có thể thay phiên nhau ăn.
Aaron Brick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.