필로소퍼 - 공유 자원에 접근하는 시간을 최소화하기

4명 기준

routine

1. 먹는거
2. 자는거
3. 생각하기

int. status. 1 1 1 1

1. 왼쪽 포크 잡기

while (1) { //스핀 락
	mutex_lock(왼쪽);
	if (left_staus == 1) {
			left_status = 0;
			mutex_unlock(왼쪽);
			return;
	}
	mutex_unlock(오른쪽);
	usleep(50);
}

lock
printf("왼쪽 잡음");
unlock

2. 오른쪽 포크 잡기

while (1) {  //스핀 락
	mutex_lock(오른쪽);
	if (right_status == 1) {
		right_status = 0;
		mutex_unlock(오른쪽);
		return;
	}
	mutex_unlock(오른쪽);
	usleep(50);
}

lock
printf("오른쪽잡음");
unlock

3. 먹기 시작 // 200ms 먹기   
// usleep(초 : 마이크로 세컨드 단위)   1us * 1000 = 1ms

lock
printf("먹기");
unlock

function eating() { // 먹는 시간 쪼개기는 다음 최적화 단계

	usleep(200 * 1000);
}

4. 내려놓기

5. 잠자기
lock
printf("잠자기");
unlock
function sleep() { // 자는 시간 쪼개기 다음 최적화 단계
	usleep(200 * 1000);
}
6. 생각하기
printf("생각하기")