반응형
reader-writer 문제에서 한쪽을 선호하는 방향으로 구현하는 것은 reader를 선호하는 방법과 writer를 선호하는 방법이 존재한다.
먼저 reader prefer 를 살펴보자.
reader prefer는 대기하는 reader가 없을 때서야 writer가 출력될 수 있다.
따라서 writer의 mutex를 reader가 가지고 있다가, 실행중인(또는 대기중인) reader의 개수가 0이 될 때 놔준다.
reader-prefer : reader
while (alive) {
pthread_mutex_lock(&mutex);
read_count++;
if(read_count == 1){
pthread_mutex_lock(&wmutex);
}
pthread_mutex_unlock(&mutex);
// reader 출력
pthread_mutex_lock(&mutex);
read_count--;
if(read_count ==0){
pthread_mutex_unlock(&wmutex);
}
pthread_mutex_unlock(&mutex);
}
reader-prefer : writer
while (alive) {
pthread_mutex_lock(&wmutex);
// writer 출력
pthread_mutex_unlock(&wmutex);
}
writer-prefer는 대기중인 writer가 reader를 선점한다.
대기중인 writer가 있다면 reader를 잠근다.
단, 실행중인 reader가 있다면 writer의 실행을 보류해둔다.
writer-prefer : reader
while (alive) {
pthread_mutex_lock(&rmutex);
read_count++;
if(read_count == 1){
pthread_mutex_lock(&mutex);
}
pthread_mutex_unlock(&rmutex);
// reader 출력
pthread_mutex_lock(&rmutex2);
read_count--;
if(read_count == 0){
pthread_mutex_unlock(&mutex);
}
pthread_mutex_unlock(&rmutex2);
}
writer prefer : writer
while (alive) {
pthread_mutex_lock(&wmutex);
write_count++;
if(write_count==1){
pthread_mutex_lock(&rmutex);
}
pthread_mutex_unlock(&wmutex);
pthread_mutex_lock(&mutex);
// writer 출력
write_count--;
if(write_count == 0){
pthread_mutex_unlock(&rmutex);
}
pthread_mutex_unlock(&mutex);
}
반응형
'학교강의필기장 > 운영체제론' 카테고리의 다른 글
운영체제론 - fair reader-writer problem (0) | 2023.06.22 |
---|---|
운영체제론[18]: 가상메모리 - 3 (0) | 2023.06.22 |
운영체제론[17]: 가상메모리 - 2 (0) | 2023.06.22 |
운영체제론[16]: 가상메모리 - 1 (0) | 2023.06.22 |
운영체제론[15]: 메모리 - 2 (0) | 2023.06.22 |