현재상황 : timer_sleep()을 돌리면
sleep list를 만들어서 넣고 block state로 변경
sleep을 깨우려면 어떻게 해야하지?
🔥 뭔가 프로그램이 멈춰버려서 열심히 gdb 사용법을 익히는중...
list traversal과 remove를 같이 쓰면 문제가 발생하는 것 같아서 list.c코드를 찾아보니 정말 그런 것 같았다!
/** DON'T DO THIS **/
for (e = list_begin (&list); e != list_end (&list); e = list_next (e))
{
...do something with e...
list_remove (e);
}
void
thread_awake(int64_t ticks) {
struct list_elem *e;
struct thread *t;
for (e = list_begin (&sleep_list); e != list_end (&sleep_list);){
t = list_entry(e, struct thread, elem);
if(t->awake_time <= ticks){
e = list_remove(e);
thread_unblock(t);
}
else {
e = list_next(e);
}
}
}
→ 테스트 통과!!!!!!!!!
비효율적인 부분이 많았지만 우선 테스트는 통과했다.