작성
·
212
0
안녕하세요 교수님 좋은 강의 언제나 감사드립니다
7단원의 동시성 제어의 고전적 문제들의 강의 예제에 대해 질문이 있습니다.
PThread solution to the Bounded Buffer Problem의 35:25초에서 질문이 있는데, 해당 버퍼가 1인 경우인 해당 예제에서는 consumer가 연속으로 2회 실행이 되고 있습니다.
하지만 설명을 해주실때에는 '적어도 동기화 문제는 해결 해준다'고 말씀해주셨는데 consumer가 2회 연속으로 실행 되는 것은 동기화의 문제는 아닌건가요?
저는 full과 empty가 동기화가 제대로 되지 않은 경우로 이해가 됩니다
혹시 제 이해가 잘못된건지, 혹은 코드의 어느 부분을 수정하면 되는 것인지 궁금합니다
답변 1
0
동기화라는 용어가 다양한 맥락에서 다양하게 쓰이기 때문에
강의할 때 저도 명확하게 어떤 맥락에서 동기화라고 했는지 잘 모르겠습니다.
다만, 해당 예제에서 producer와 consumer가 각각 하나인 경우이고,
buffer가 한 개인 경우에서라면,
1) 두 개의 프로세스, 즉, producer와 consumer가 동시에 임계구역에 들어갈 수 없고,
2) producer가 생산한 데이터가 버퍼에 있을 때에만, consumer가 buffer에 액세스할 수 있고
consumer가 버퍼의 모든 데이터를 소비했을 때만 producer가 buffer에 액세스할 수 있어야 합니다.
이 조건이 producer가 여러 개일 때, consumer가 여러 개일 때, 혹은 둘 다 여러 개일때,
또는, buffer의 크기가 n개 일때, 혹은, buffer의 개수가 m개 일 때 등의 다양한 상황에서
동기화의 조건은 달라질 수 있습니다.
강의에서 주어진 예제를 바탕으로 위 상황을 다양하게 살펴보고 실험해 보시라는 의미로 이해하시면 좋을 듯 합니다. (동기화라는 용어 자체를 명확히 정의하기가 쉽지 않습니다.)