Holds a lock in shared mode while executing a body of code.
mp
with-sharing-lock (sharing-lock &optional whostate timeout) &body body => results
| sharing-lock⇩ | 
A sharing lock. | 
| whostate⇩ | 
A string or  nil. | 
| timeout⇩ | 
A non-negative real or  nil. | 
| body⇩ | 
The forms to execute. | 
| results | 
The values returned from evaluating body. | 
The macro with-sharing-lock is like with-lock, but sharing-lock must be a "sharing" lock and will be locked in shared mode. That means that other threads can also lock it in shared mode.
Before locking, with-sharing-lock waits for sharing-lock to be free of any exclusive lock, but it does not check for other shared mode use of the same lock. It then locks sharing-lock in sharing mode, evaluates body and unlocks sharing-lock.
If whostate is non-nil, it is used as the wait reason while waiting for sharing-lock.
timeout, if non-nil, specifies the time in seconds to wait before timing out. The default value of timeout is nil.
It is possible to lock for sharing inside the scope of sharing lock and inside the scope of an exclusive lock.
LispWorks® User Guide and Reference Manual - 01 Dec 2021 19:30:51