@@ -35,29 +35,17 @@ func createLock() -> some LockType {
35
35
return UnfairLock ( )
36
36
}
37
37
38
- // MARK: - Unfair lock
39
-
40
- //
41
- // Read http://www.russbishop.net/the-law for more information on why this is necessary
42
- //
43
- final class UnfairLock : LockType {
44
- private var _lock : UnsafeMutablePointer < os_unfair_lock >
45
-
46
- fileprivate init ( ) {
47
- _lock = UnsafeMutablePointer< os_unfair_lock> . allocate( capacity: 1 )
48
- _lock. initialize ( to: os_unfair_lock ( ) )
49
- }
38
+ // MARK: - Mutex
50
39
51
- deinit {
52
- _lock. deinitialize ( count: 1 )
53
- _lock. deallocate ( )
54
- }
40
+ @available ( iOS 18 . 0 , macOS 15 . 0 , tvOS 18 . 0 , visionOS 2 . 0 , * )
41
+ private final class MutexWrapper : LockType {
42
+ private let mutex = Mutex ( ( ) )
55
43
56
44
@inline ( __always)
57
45
func sync< Result> ( _ fnc: ( ) throws -> Result ) rethrows -> Result {
58
- os_unfair_lock_lock ( _lock )
59
- defer { os_unfair_lock_unlock ( _lock ) }
60
- return try fnc ( )
46
+ try mutex . withLock { _ in
47
+ try fnc ( )
48
+ }
61
49
}
62
50
}
63
51
@@ -71,16 +59,28 @@ extension OSAllocatedUnfairLock: LockType where State == Void {
71
59
}
72
60
}
73
61
74
- // MARK: - Mutex
62
+ // MARK: - Unfair lock
75
63
76
- @available ( iOS 18 . 0 , macOS 15 . 0 , tvOS 18 . 0 , visionOS 2 . 0 , * )
77
- private final class MutexWrapper : LockType {
78
- private let mutex = Mutex ( ( ) )
64
+ //
65
+ // Read http://www.russbishop.net/the-law for more information on why this is necessary
66
+ //
67
+ private final class UnfairLock : LockType {
68
+ private let _lock : UnsafeMutablePointer < os_unfair_lock >
69
+
70
+ init ( ) {
71
+ _lock = UnsafeMutablePointer< os_unfair_lock> . allocate( capacity: 1 )
72
+ _lock. initialize ( to: os_unfair_lock ( ) )
73
+ }
74
+
75
+ deinit {
76
+ _lock. deinitialize ( count: 1 )
77
+ _lock. deallocate ( )
78
+ }
79
79
80
80
@inline ( __always)
81
81
func sync< Result> ( _ fnc: ( ) throws -> Result ) rethrows -> Result {
82
- try mutex . withLock { _ in
83
- try fnc ( )
84
- }
82
+ os_unfair_lock_lock ( _lock )
83
+ defer { os_unfair_lock_unlock ( _lock ) }
84
+ return try fnc ( )
85
85
}
86
86
}
0 commit comments