LOCK(2) LOCK(2) NAME lock - thread locking. SYNOPSIS include "lock.m"; lock := load Lock Lock->PATH; Semaphore: adt { obtain: fn(s: self ref Semaphore); release: fn(s: self ref Semaphore); new: fn(): ref Semaphore; }; init: fn(); DESCRIPTION Lock provides semaphore-based mutual exclusion. Init must be called before creating any locks. Semaphore.new() Creates and returns a reference to a new Semaphore (lock). s.obtain() Obtains exclusive access to the lock s. It will block until it can do so. s.release() Releases access to the lock s and allows processes waiting on it to proceed. EXCEPTIONS If lock allocation fails, a ``lock alloc'' exception is raised. SOURCE /appl/lib/lock.b BUGS The current implementation uses a pipe and thus two file descriptors for every lock. On the other hand, when a pro- cess exists, garbage collection of file descriptors ensures that locks are relinquished. Page 1 Plan 9 (printed 12/21/24)