Files
Hamish Knight 03d8ea5248 Introduce swift-xcodegen
This is a tool specifically designed to generate
Xcode projects for the Swift repo (as well as a
couple of adjacent repos such as LLVM and Clang).
It aims to provide a much more user-friendly experience
than the CMake Xcode generation (`build-script --xcode`).
2024-11-05 22:42:10 +00:00

44 lines
1.1 KiB
Swift

//===--- Lock.swift -----------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2024 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import os
final class Lock: @unchecked Sendable {
private let lockPtr: UnsafeMutablePointer<os_unfair_lock>
init() {
self.lockPtr = UnsafeMutablePointer<os_unfair_lock>.allocate(capacity: 1)
self.lockPtr.initialize(to: os_unfair_lock())
}
func lock() {
os_unfair_lock_lock(self.lockPtr)
}
func unlock() {
os_unfair_lock_unlock(self.lockPtr)
}
@inline(__always)
func withLock<R>(_ body: () throws -> R) rethrows -> R {
lock()
defer {
unlock()
}
return try body()
}
deinit {
self.lockPtr.deinitialize(count: 1)
self.lockPtr.deallocate()
}
}