동기화를 위한 코드 구현 구경하기
동기화란 변경이 일어나면 안 되는 특정 코드를 보호하기 위한 잠금 기법을 말한다.
코드는 임계 영역(Critical Section)이라고도 부른다.
자바에서는 아래와 같이 사용한다.
Lock lock = new ReentrantLock();
lock.lock(); // 잠금
try {
// 작업
} finally{
lock.unlock(); // 잠금 해제
}
위 코드를 특정 함수를 보호하기 위한 고차 함수로 만들어 본다.
import java.util.concurrent.locks.ReentrantLock
var sharable = 1 // 보호가 필요한 자원
fun <T> lock(reLock: ReentrantLock, body: () -> T): T {
reLock.lock()
try {
return body()
} finally {
reLock.unlock()
}
}
fun criticalFunc() {
sharable += 1
}
fun main() {
val reLock = ReentrantLock()
lock(reLock, { criticalFunc() })
lock(reLock) { criticalFunc() }
lock(reLock, ::criticalFunc)
println(sharable)
}
//4
'코틀린' 카테고리의 다른 글
Do it! 코틀린 프로그래밍, 03-6 함수의 변수의 범위 (0) | 2021.08.26 |
---|---|
Do it! 코틀린 프로그래밍, 03-5 코틀린의 다양한 함수 알아보기 (0) | 2021.08.25 |
Do it! 코틀린 프로그래밍, 03-3 함수와 함수형 프로그래밍 (0) | 2021.08.24 |
Do it! 코틀린 프로그래밍, 03-2 함수형 프로그래밍 (0) | 2021.08.23 |
Do it! 코틀린 프로그래밍, 03-1 함수 선언하고 호출하기 (0) | 2021.08.23 |