task - comparing the priority when list_elem a and list_elem b are given.
-> point is accessing waiters from list_elem.
-> after checking the structure, access it.
sema_elem - list_elem, semaphore(list(waiters) - list of threads, value)
-> path : list_elem - sema_elem - sema - list - threads
-> now that I know the path, access it by each type of data.
/** 첫번째 인자로 주어진 세마포어를 위해 대기중인 가장 높은 우선순위의 스레드와,
* 두번째 인자로 주어진 세마포어를 위해 대기중인 가장높은 우선순위의 스레드와 비교*/
bool
cmp_sem_priority (const struct list_elem *a, const struct list_elem *b, void *aux) {
// semaphore_elem으로부터 각 semaphore_elem의 쓰레드 디스크립터를 획득. -> thread discriptor 라는게 뭐지
struct semaphore_elem *se_a = list_entry(a, struct thread, elem);
struct semaphore_elem *se_b = list_entry(b, struct thread, elem);
struct semaphore sema_a = se_a->semaphore;
struct semaphore sema_b = se_b->semaphore;
struct list *waiters_a = &sema_a.waiters;
struct list *waiters_b = &sema_b.waiters;
struct thread* t_a = list_begin(waiters_a);
struct thread* t_b = list_begin(waiters_b);
return t_a->priority > t_b->priority;
}