왜 5 명의 식사 철학자?


18

나는 철학자 식사 문제 가 5 명의 철학자 사례에 근거한 이유가 궁금합니다 . 왜 안돼?

우리는 4 명의 사상가가 주어 졌을 때 5 명의 철학자 사례를 논의 할 때 발생할 수있는 모든 불쾌한 문제를 관찰 할 수 있다고 생각합니다. 그것은 역사적인 이유 일 뿐입니 까?


1
원래 문제는 1965 년 Dijkstra에 의해 설명되었고 Dining Quintuple ( 3 페이지 상단에 있는 메모 에서 발견됨)이라고 불렀습니다 .

나는 4 명의 식사 철학자를 aobut를 배우는 것을 기억하는 것 같다.
Michael Borgwardt

16
누군가가 명백한 것을 알아 차 리려고했는지 보려고 노력했기 때문에 철학자 5 명이다. 5 명의 철학자들은 식당이 쫓겨날 때까지 대화를 나 will 다. 4 식사를 시작하기에 충분한 시간 동안 대화가 중단 될 수 있습니다. 두 개가 잠시 대화를 중단하자마자 5를 사용하면 대기열에 연속성을 보장하기 위해 대기 중 하나가 이미 있습니다.
지미 호파

1
@Jimmy Hoffa-+ 1. 그리고 왜 대답이되지 않습니까?
SChepurin 2019

답변:


17

EWD310 "순차적 프로세스의 계층 적 순서"에 쓰여진 내용에 따르면 , 학생들이 문제 해결을 보여주기 위해 설계된 알고리즘을 더 쉽게 이해할 수 있도록하기 위해 교육 목적으로 5 번이 선택된 것처럼 보입니다.

이 논문은 5가 일반적인 문제와 실제로 관련이 없다는 생각을 뒷받침한다. 먼저 "문제는 9 명 또는 25 명의 철학자들에게 제기 될 수있다"는 점을 명시 적으로 언급하고 , 다음으로 동시에 운영되는 두 가지 측면에서이를 표현함으로써 실체, "클래스 A와 클래스 B, 동일한 자원을 공유 ..."

Dijkstra가 사용하는 솔루션은 사고, 식사, 배고픈 세 가지 "철학자 상태"를 소개합니다. 문제를 해결하기 위해 제시된 코드는이 세 가지 상태 수많은 철학자 와 관련시키지 않고 운영합니다 .

저자가 다수의 철학자 2, 3 또는 4를 선택했을 경우, 선택된 숫자가 상태의 양 또는 다른 것과 관련이 있는지 여부에 관계없이 코드를 읽는 학생들의 혼란을 유발할 수 있습니다. 이 변경 얼마나 예를 들어 주 :이 쉽게 아래 EWD310에서 인용 설명에서 언급 한 숫자를 시도하여 테스트 할 수 있습니다 [0:4][0:3], [0:2], [0:1]참여와 문 mod.

이것과 반대로, 5 번은 상당히 결백 해 보이고 불필요한 연결을 불러 오지 않습니다. 철학자의 양이 자의적 이라는 것을 더 잘 설명하기 위해 선택되었다고 말할 수있다 .


언급 된 알고리즘은 다음과 같이 EWD310에 제공됩니다.

... 우리는 각 철학자와 상태 변수 "C"를 말합니다.

C[i] = 0의미 : 철학자 i는 생각

C[i] = 2의미 : 철학자 i가 먹고있다.

...

우리는 마지막 전환을 위해 중간 상태를 소개합니다

C[i] = 1의미 : 철학자 i는 배고프다

이제 각 철학자는 0, 1, 2, 0 상태를 주기적으로 통과 할 것입니다. 다음으로 물어볼 질문은 : (위험한) 철학자가 1에서 2로 전환되는 시점은 언제 K입니까?

...

우주에서 우리는 선언 된 것으로 가정

1) semaphore mutex, 처음 = 1

2) integer array C[0:4], 처음에 모든 요소 = 0

3) semaphore array prisem[0:4]초기에 모든 요소 = 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;

( K존재할 때의 불안정성을 해결하는이 절차 는 중요 섹션 내에서만 호출됩니다).

이 우주에서 철학자의 삶은 w이제 코딩 될 수 있습니다

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

그리고 이것은 내가 목표로하고있는 해결책을 마무리 짓습니다 ...


2
나는 철학자가 아닐 수도 있습니다. 왜냐하면 식사를하거나 배가 고플 때 동시에 생각할 수 있기 때문입니다. 그리고 더 : 그들 중 누구도 술을 마시거나 심지어 말하고 있지 않습니다.
ott--

5

Dijkstra 만이 확실하게 대답 할 수 있지만 임의적이라고 확신합니다.

"이것은 원래 1965 년 Edsger Dijkstra가 테이프 드라이브 주변 장치에 액세스하기 위해 경쟁하는 컴퓨터와 관련하여 학생 시험 연습으로 공식화되었습니다. 곧 Tony Hoare는 문제를 현재 공식화했습니다."

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


2
다섯 개에 비해 네 개 식당의 문제를 고려하십시오. 문제는 어떻게 변합니까? 더 쉽거나 더 어렵습니까? 이것은 시험 문제였습니다. 어려운 것은 아마도 묻고 자하는 것입니다.

2

홀수도 아니기 때문에. 따라서 대칭 또는 쌍 형성에 의존하는 알고리즘을 고안하려고 시도하지 않고 일반적인 경우에는 작동하지 않습니다.

이것은 의견입니다. 저자의 생각을 초월한 것에 대한 역사적 지식이 없습니다.


이 점이 중요합니다. 4 명의 철학자와 함께 2 쌍의 사람들은 교대로 식사를 할 수있었습니다.
Aaron Brick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.