코루틴에서의 락우리는 이전 글에서 코루틴에서 ReentrantLock 사용해 락을 걸게 될 경우, 락이 해제 되기 전에 코루틴의 스레드 양보가 일어나면 데드락이 발생할 수 있다는 것을 알아보았다. [Kotlin] 코루틴을 사용할 때 ReentrantLock을 사용해 락을 걸면 안되는 이유시작하며 우리는 이전 글에서 ReentrantLock을 사용해 락을 걸고 해제해보면서, 여러 스레드가 동시에 접근해도 안전한 임계영역(Critical Area)을 만드는 방법에 대해 살펴봤다. [Kotlin] ReentrantLock 사용kotlinworld.com그렇다면, 코루틴에서 안전한 임계 영역(Critical Area)을 만들기 위해서는 어떻게 해야 할까? 바로 젯브레인의 코루틴 라이브러리(kotlinx.coro..
분류 전체보기
시작하며 우리는 이전 글에서 ReentrantLock을 사용해 락을 걸고 해제해보면서, 여러 스레드가 동시에 접근해도 안전한 임계영역(Critical Area)을 만드는 방법에 대해 살펴봤다. [Kotlin] ReentrantLock 사용해 락 걸고 해제하기 ReentrantLock 사용해 락 걸기 코틀린에서는 기본적으로 자바의 ReentrantLock 클래스를 사용해 락을 걸고 해제할 수 있다. ReentrantLock을 사용해 락을 걸고 해제하는 방법은 간단하다. 임계영역(Critical Are kotlinworld.com 이번 글에서는 ReentrantLock을 사용해 코루틴에서 임계 영역을 만들 때의 문제점과 ReentrantLock을 사용해도 되는 경우와 안 되는 경우에 대해 알아본다. 코루틴에..
ReentrantLock 사용해 락 걸기 코틀린에서는 기본적으로 자바의 ReentrantLock 클래스를 사용해 락을 걸고 해제할 수 있다. ReentrantLock을 사용해 락을 걸고 해제하는 방법은 간단하다. 임계영역(Critical Area)의 시작지점에서 ReentrantLock 객체의 lock 함수를 호출하고 임계영역의 종료 지점에서 ReentrantLock의 unlock 함수를 호출하면 된다. ReentrantLock 객체를 사용해 보기 위해 다음과 같은 SafeAdder 클래스를 만들어보자. 이 SafeAdder 클래스는 add 함수를 여러 스레드가 동시에 호출하더라도 손실되는 연산 없이 더하기 연산이 수행되도록 만든 클래스이다. *물론 add 함수에 @Synchronized를 붙이면 간단하..
코틀린 파일의 최상위에 선언된 함수가 컴파일 될 때 일어나는 일 코틀린에서는 .kt 파일을 만든 다음 최상위에 함수를 선언하는 것이 허용된다. 예를 들어 다음과 같이 main 패키지 안에 선언된 Main.kt파일 내부에 printHello 함수가 선언되어 있다고 해보자. 우리가 이를 바이트 코드로 컴파일 하면 다음과 같이 MainKt.class 파일이 생성되며, 이 MainKt 클래스 내부에는 printHello 함수가 정적 함수로 선언된다. 따라서 우리는 이 함수를 자바 파일에서 다음과 같이 사용할 수 있다. import main.MainKt; public class Test { public static void main(String[] args) { MainKt.printHello(); } } 위 코..
코틀린 클래스 생성자와 기본값 코틀린에서는 클래스의 생성자에 기본값을 설정하는 것이 허용된다. 예를 들어 우리가 일반적인 메모장을 위한 클래스를 만든다고 해보자. 이 메모장에는 제목(title), 부제목(subTitle), 내용(content)이 들어가며 이를 표현하는 Memo 클래스는 다음과 같이 만들 수 있다. class Memo(val title: String, val subTitle: String = "", val content: String = "") 이렇게 만들어진 Memo 클래스는 다음과 같이 초기화가 가능하다. fun main() { val memo = Memo("dummy title") } 그러면 이 메모 객체는 title 필드에만 dummy title이라는 값이 들어가고 나머지 필드에는..