A Lisp object.
A function designator for a function of no arguments.
gethash-ensuring gets the value for the key key from the hash table hash-table, and if this fails constructs a new value, puts it in the table and returns it.
gethash-ensuring does this in a thread-safe way, which means that all threads calling it with the same key and hash-table return the same value (as long as nothing removes it from the table).
If key is not found and constructor is non-nil, constructor is called to construct the new value. constructor is called without any lock, and can do whatever is needed. The value that constructor returns may be discarded by
gethash-ensuring if, by the time it returns, there is already a matching value in hash-table (added by another thread or even inside constructor).
If in-lock-constructor is non-nil it is called with the result of constructor, or with
nil if constructor is
nil. in-lock-constructor is called with hash-table locked, and its return value is guaranteed to be put in the table and to be returned by
gethash-ensuring. If in-lock-constructor is
nil then the value that is returned by constructor, or
nil, is used.
LispWorks User Guide and Reference Manual - 13 Feb 2015