1. TSan 사용법(경쟁 상황 발견하는 Tool)

Thread-safe한 코드의 구현과 방법

<aside> 💡 Lock으로 올바르게 구현하는 것은 어렵기도하고, DeadLock이 생길 가능성이 높다. Lock을 사용해서 구현하는 것은 Low-Level의 해결책이다.

</aside>

TSan 사용법

2. 시리얼큐와 Sync

Thread-safe한 코드를 작성하기 위해서는 sync메소드를 사용해야한다.

위와 같은 그림은 Thread-safe하지 않다. 코드에서 단순히 다음과 같이 구현되어 있다고 볼 수 있다.

private let serialQueue = DispatchQueue(label: "...")
private var _count = 0
public var count: Int {
	get {
		return _count
	}
	set {
		_count = newValue
	}
}

sync를 사용해주게 되면 아래의 그림처럼 공통 접근 변수에 대해 안전하게 접근이 가능하다.

private let serialQueue = DispatchQueue(label: "...")
private var _count = 0
public var count: Int {
	get {
		return serialQueue.sync {
			_count
		}
	}
	set {
		serialQueue.sync {
			_count = newValue
		}
	}
}