30 lines · 703 B · Text
RawDownload
= lock: thread locking.     include "lock.m";    lock := load Lock Lock->PATH;    Semaphore: adt {         c: chan of int;         obtain: fn(s: self ref Semaphore);         release: fn(s: self ref Semaphore);         new: fn(): ref Semaphore;    };    init: fn(); Lock provides semaphore-based mutual exclusion.  Init must becalled 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. == source/appl/lib/lock.b