AllocatedLock is a lightweight cross platform lock with an API compatible with OSAllocatedUnfairLock. The lock wraps os_unfair_lock_t on Darwin platforms, pthread_mutex_t on Linux and SRWLOCK on Windows.
AllocatedLock can be installed by using Swift Package Manager.
Note: AllocatedLock requires Swift 5.7 on Xcode 14+. It runs on iOS 13+, tvOS 13+, macOS 10.15+, Linux and Windows. To install using Swift Package Manager, add this to the dependencies: section in your Package.swift file:
.package(url: "https://github.com/swhitty/AllocatedLock.git", .upToNextMajor(from: "0.0.2"))Usage is similar with OSAllocatedUnfairLock.
The recommended usage to create a lock that protects some state:
let state = AllocatedLock<Int>(initialState: 0)Use .withLock to acquire the lock to read the state:
let val = state.withLock { $0 }Or mutate the state
let val = state.withLock { $0 += 1 }AllocatedLock is primarily the work of Simon Whitty.