경전의 동기화 문제 - 독자 작성자

7690 단어
문제 설명:
하나의 데이터 파일이나 기록을 여러 프로세스에 공유할 수 있습니다. 이 파일만 읽어야 하는 프로세스를 'Reader 프로세스' 라고 하고, 다른 프로세스를 'Writer 프로세스' 라고 합니다.여러 프로세스가 하나의 공유 대상을 동시에 읽을 수 있도록 합니다. 왜냐하면 읽기 동작이 데이터 파일을 혼란스럽게 하지 않기 때문입니다.그러나 한 Writer 프로세스와 다른 Reader 프로세스 또는 Writer 프로세스가 공유 객체에 동시에 액세스하는 것은 허용되지 않습니다. 이러한 액세스는 혼란을 야기하기 때문입니다.독자-작성자 문제(Reader-Writer Problem)란 하나의 Writer 프로세스가 다른 프로세스와 공유 객체에 배타적으로 액세스해야 하는 동기화 문제를 말합니다.독자 - 작성자 문제는 항상 새로운 동기화 원어를 테스트하는 데 쓰인다.
1. 기록형 신호량으로 독자-작성자 문제 해결
Reader와 Writer 프로세스 간에 읽거나 쓸 때의 상호 배척을 실현하기 위해 상호 배척 신호량인 Wmutex를 설정합니다.또한 읽는 프로세스 수를 나타내는 정수 변수 Readcount를 설정합니다.Reader 프로세스가 읽기 중이면 Writer 프로세스가 쓰기를 허용하지 않기 때문입니다.따라서 Readcount=0 은 읽기 중인 Reader 프로세스가 없음을 나타내는 경우에만 Wait(Wmutex) 작업을 수행해야 합니다.Wait(Wmutex) 작업이 성공하면 Reader 프로세스를 읽고 Readcount+1 작업을 할 수 있습니다.마찬가지로, Reader 프로세스가 Readcount 마이너스 1 작업을 실행한 후에 값이 0일 때만, Writer 프로세스가 쓰기 위해 signal (Wmutex) 작업을 실행해야 한다.또한 Readcount는 여러 Reader 프로세스에 접근할 수 있는 임계 자원이기 때문에 상호 배척 신호량인rmutex를 설정해야 한다.
설명:
상호 배척 신호량wmutex: Reader와 Writer 프로세스 간에 읽거나 쓸 때의 상호 배척을 실현하고, 정형 변수Readcount: 읽는 프로세스의 수를 표시합니다.Reader 프로세스 중 하나만 읽으면 Writer 프로세스 쓰기가 허용되지 않기 때문입니다.따라서 Readcount=0, 즉 Reader 프로세스가 읽지 않을 때만 Reader는 Wait(wmutex) 작업을 수행해야 합니다.Wait(wmutex) 작업이 성공하면 Reader 프로세스를 읽을 수 있고 그에 상응하여Readcount+1 작업을 할 수 있습니다.같은 이치로, Reader 프로세스가 Readcount 감1 작업을 실행한 후에 값이 0일 때만, Write 프로세스가 쓰기 위해 signal (wmutex) 작업을 실행해야 한다.
상호 배척 신호량 rmutex: Reader 프로세스 간 상호 배척 접근 Readcount
독자 - 작성자 문제는 다음과 같습니다.
 1  Var rmutex,wmutex:  semaphore:=1,1 2     Readcount:  integer:=0 3        begin
 4        parbegin
 5        Reader:  begin
 6             repeat
 7             wait(rmutex);
 8             if readcount=0 then wait(wmutex);
 9                 Readcount:=Readcount+110             signal(rmutex);
11             ...
12             perform read operation;
13             ...
14             wait(rmutex);
15             readcount:=readcount-116             if readcount=0 then signal(wmutex);
17             signal(rmutex);
18         until false19         end
20         writer:  begin
21             repeat
22                 wait(wmutex);
23                 perform write operation;
24                 signal(wmutex);
25             until false26             end
27     parend
28 end

2. 신호량 집합 메커니즘을 이용하여 독자-작가 문제를 해결한다.
여기의 독자 - 작성자 문제는 앞의 것과 약간 다르기 때문에 최대 RN 독자만 동시에 읽을 수 있도록 제한을 추가했다.이를 위해 또 하나의 신호량 L을 도입하고 RN으로 초기 값을 부여해 wait(L, 1, 1) 조작을 실행함으로써 독자의 수를 조절한다.한 명의 독자가 들어갈 때마다 먼저 wait(L,1,1) 조작을 실행하여 L의 값을 1로 줄여야 한다.RN 독자가 읽기에 들어가면 L은 0으로 줄고, 제RN +1 독자가 읽기에 들어가면 wait(L, 1, 1) 조작 실패로 막힐 수밖에 없다.
설명은 다음과 같습니다.
 1 Var RN integer;
 2     L, mx: semaphore:=RN,1 3   begin
 4     parbegin
 5       reader: begin
 6         repeat
 7             Swait(L,1,1);
 8             Swait(mx,1,0);
 9             ...
10             perform read operation;            
11             ...
12             Ssignal(L,1);
13         until false14         end
15       writer: begin
16         repeat
17         Swait(mx,1,1;L,RN,0);
18         perform write operation;
19         Ssignal(mx,1);
20         until false21         end
22     parend
23   end

 
전재 대상:https://www.cnblogs.com/IamJiangXiaoKun/p/9467420.html

좋은 웹페이지 즐겨찾기