Skip to content

Instantly share code, notes, and snippets.

@V8tr
Created July 14, 2018 07:15
Show Gist options
  • Save V8tr/5d079c49693d62b75e0885d686806f6e to your computer and use it in GitHub Desktop.
Save V8tr/5d079c49693d62b75e0885d686806f6e to your computer and use it in GitHub Desktop.
Atomic property in Swift using ReadWriteLock. See blog post for more details: http://www.vadimbulavin.com/atomic-properties/
final class ReadWriteLock {
private var rwlock: pthread_rwlock_t = {
var rwlock = pthread_rwlock_t()
pthread_rwlock_init(&rwlock, nil)
return rwlock
}()
func writeLock() {
pthread_rwlock_wrlock(&rwlock)
}
func readLock() {
pthread_rwlock_rdlock(&rwlock)
}
func unlock() {
pthread_rwlock_unlock(&rwlock)
}
}
class ReadWriteLockAtomicProperty {
private var underlyingFoo = 0
private let lock = ReadWriteLock()
var foo: Int {
get {
lock.readLock()
let value = underlyingFoo
lock.unlock()
return value
}
set {
lock.writeLock()
underlyingFoo = newValue
lock.unlock()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment