//===--- MutexBox.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 // //===----------------------------------------------------------------------===// final class MutexBox: @unchecked Sendable { private let lock = Lock() private var value: T init(_ value: T) { self.value = value } @inline(__always) func withLock(_ body: (inout T) throws -> R) rethrows -> R { try lock.withLock { try body(&value) } } } extension MutexBox { convenience init() where T == U? { self.init(nil) } convenience init() where T == [U: V] { self.init([:]) } convenience init() where T == [U] { self.init([]) } }