Refactor sema_up to add comments for clarity, w/ T

This commit is contained in:
sBubshait
2024-10-22 21:04:14 +01:00
parent 48104b3a41
commit 78c6fd36e3

View File

@@ -106,7 +106,7 @@ sema_try_down (struct semaphore *sema)
This function may be called from an interrupt handler. */
void
sema_up (struct semaphore *sema)
sema_up (struct semaphore *sema)
{
enum intr_level old_level;
@@ -114,14 +114,19 @@ sema_up (struct semaphore *sema)
old_level = intr_disable ();
if (!list_empty (&sema->waiters))
{
struct list_elem *e = list_min (&sema->waiters, priority_more, NULL);
list_remove (e);
thread_unblock (list_entry (e, struct thread, elem));
}
{
/* Enforces wake-up of the highest priority thread waiting for the
semaphore. */
struct list_elem *e = list_min (&sema->waiters, priority_more, NULL);
list_remove (e);
thread_unblock (list_entry (e, struct thread, elem));
}
sema->value++;
intr_set_level (old_level);
/* Yields the CPU in case the thread that has been woken up has a higher
priority that the current running thread, including the case when called
within an interrupt handler. */
if (intr_context ())
intr_yield_on_return ();
else