
Locks can be used to control access to shared data by several processes.
A lock has the following components: name (a string), lock ( t or nil , that is, whether the lock is set or not), owner (a process, or nil ) and count (an integer showing the number of times the lock has been set).
The two main symbols used in locking are the function make-lock , to create a lock, and the macro with-lock , to execute a body of code while holding the specified lock.
mp:make-lock &key important-p &allow-other-keys Creates a lock object. If important-p is t the lock is added to the list held in the global variable mp:*important-locks* . The function mp:free-important-locks frees all important locks associated with a given process (or all the important locks if called on nil ). Other keywords should be names of the lock components.
mp:process-lock lock &optional whostate timeout Blocks the current process until the lock is claimed or timeout elapses if it has been specified. Returns t if lock was claimed, nil otherwise.
mp:process-unlock lock &optional errorp Releases the lock. If errorp is non- nil it signals an error if the current process does not own the lock. The default value of errorp is t .
mp:with-lock (( lock &rest lock-args ) &body body Executes the body with lock held. Arguments to pass on to mp:process-lock are specified using lock-args .
The following accessors are available for locks: lock-owner , lock-count , lock-name and lock-lock .