components/named_system_lock/README.md
This component provides a named system lock that allows for synchronization across multiple processes without relying on lockfiles. Linux, MacOS, and Windows are supported.
The lock is implemented per platform:
bootstrap_check_in(), interpreting ownership of receive rights
on a Mach service name as ownership of a lock.The lock is implemented using a pthread mutex in shared memory. Contenders
attempt to open a POSIX shared memory object, creating the object if it does not
exist. The mutex is configured with the PTHREAD_MUTEX_ROBUST attribute to
ensure that it remains recoverable if the process holding the lock exits
abnormally.
Due to the nature of the shm_unlink system call, it is impossible for any
contending process to determine if it is safe to destroy the shared memory
object. Consider the following sequence of processes A, B, and C:
In the sequence above, unlinking the shared memory created a situation in which processes B and C hold the lock simultaneously. Thus, by design, the lock uses a leaky mutex in shared memory. The leak occurs once per named lock and is around 40 bytes.