코틀린

Do it! 코틀린 프로그래밍, 03-4 고차 함수와 람다식의 사례 알아보기

조요피 2021. 8. 24. 23:34

동기화를 위한 코드 구현 구경하기

동기화란 변경이 일어나면 안 되는 특정 코드를 보호하기 위한 잠금 기법을 말한다.

코드는 임계 영역(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