X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Fsynch.c;h=c3b46a8c7f675708cacd2d68d0b35c894480c5f6;hb=9aeade22c073c7a94bc5b56f6c00c0edaeed2b00;hp=39e43c3d57868935224f2a77e7305b96e4cff6b6;hpb=750d21936d284127e265d050ccbce76fca1ece1a;p=pintos-anon diff --git a/src/threads/synch.c b/src/threads/synch.c index 39e43c3..c3b46a8 100644 --- a/src/threads/synch.c +++ b/src/threads/synch.c @@ -1,13 +1,12 @@ #include "synch.h" #include "interrupt.h" #include "lib.h" -#include "malloc.h" #include "thread.h" /* One thread in a list. */ struct thread_elem { - struct list_elem elem; + list_elem elem; struct thread *thread; }; @@ -35,7 +34,9 @@ sema_init (struct semaphore *sema, unsigned value, const char *name) atomically decrements it. This function may sleep, so it must not be called within an - interrupt handler. */ + interrupt handler. This function may be called with + interrupts disabled, but interrupts will be turned back on if + we need to sleep. */ void sema_down (struct semaphore *sema) { @@ -117,9 +118,9 @@ sema_self_test (void) /* Initializes LOCK and names it NAME (for debugging purposes). A lock can be held by at most a single thread at any given - time. Our locks are not "recursive", meaning that it is an - error for a thread that holds a lock to attempt to reacquire - it. + time. Our locks are not "recursive", that is, it is an error + for the thread currently holding a lock to try to acquire that + lock. A lock is a specialization of a semaphore with an initial value of 1. The difference between a lock and such a @@ -147,7 +148,9 @@ lock_init (struct lock *lock, const char *name) thread. This function may sleep, so it must not be called within an - interrupt handler. */ + interrupt handler. This function may be called with + interrupts disabled, but interrupts will be turned back on if + we need to sleep. */ void lock_acquire (struct lock *lock) { @@ -205,7 +208,7 @@ lock_name (const struct lock *lock) /* One semaphore in a list. */ struct semaphore_elem { - struct list_elem elem; + list_elem elem; struct semaphore semaphore; }; @@ -240,7 +243,9 @@ cond_init (struct condition *cond, const char *name) from locks to condition variables. This function may sleep, so it must not be called within an - interrupt handler. */ + interrupt handler. This function may be called with + interrupts disabled, but interrupts will be turned back on if + we need to sleep. */ void cond_wait (struct condition *cond, struct lock *lock) {