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.