리눅스 커널 2.4에서 스케줄 선점 하는 방법없나요??
리눅스에서 동기화 문제를 해결하기 위해 여러가지 방법을 알아보고 있는 초보 프로그래머입니다.
check_again: pthread_mutex_lock(&mutex); //---------------------lock
// 소비자가 소비할 수 있는 조건인지를 검사함.
if (head == tail) { /* Buffer Empty */
// 계속 소비할 수 없을 경우 다른 생산자나 소비자가 lock을 사용할 수 있도록 lock을 풀어줌.
pthread_mutex_unlock(&mutex); //---------------------unlock
goto check_again; // 다시 lock을 얻기 위해 점프함.
}
if (buffer[tail] != out_value) {
//printf("error exprected:%d, read:%d\n", out_value, buffer[tail]);
error_count++;
}
out_value = buffer[tail] + 1;
tail = (tail + 1) % MAX_BUF_ENTRY;
// 소비작업을 모두 수행했으므로 생산자나 다른 소비자가 lock을 사용할 수 있도록 lock을 풀어줌.
pthread_mutex_unlock(&mutex); //---------------------unlock
}
여기서 뮤텍스 말고 스케줄링 선점 하는 방식으로 해볼려는데 2.5부터는 preempt_disable()함수를 쓰면 되는데 저희 실습 환경이 커널 2.4라서 안되네요 ㅡ.ㅡ 방법이 없을까요? 우선순위를 확 높인다거나 그럼 답변 바랍니다.
선점은 아니되옵고, 단지 우선순위를 쪼금 올리는 nice() 정도랄까요?
선점은 아니되옵고, 단지 우선순위를 쪼금 올리는 nice() 정도랄까요?
실습이라면, 만들어서 함이 타당하다고 봅니다.
시뮬레이터라도...
댓글 달기