4 // There are two basic lock types: Lock and SpinLock. A thread that
5 // blocks on a Lock may sleep until it obtains the lock. In kernel code,
6 // a thread that blocks on a SpinLock will not sleep, but will run a busy
7 // loop until the lock is freed. In userspace code, a SpinLock behaves
8 // as an ordinary Lock.
11 #include <kern/lock.h>
14 #include <util/spinlock.h>
20 AutoLock(Lock &lock) : real_lock(lock)
31 struct DroppableAutoLock {
35 DroppableAutoLock(Lock &lock) : real_lock(lock)
62 struct DoubleAutoLock {
63 Lock &real_lock1, &real_lock2;
65 DoubleAutoLock(Lock &lock1, Lock &lock2) :
66 real_lock1(lock1), real_lock2(lock2)
68 if (&lock1 < &lock2) {