
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 .