일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 스레드
- 알게되는
- mockito
- 디자인패턴
- 알고리즘
- 안드로이드강좌
- 병럴프로그래밍
- theming
- 테스트
- ReactiveProgramming
- 코루틴
- Coroutine
- Kotlin
- viewmodel
- 코틀린
- Compose
- 자바
- g 단위테스트
- 회고
- 커스텀상태
- 안드로이드
- android
- Rxjava
- 안드로이드스튜디오
- kotlin강좌
- 병렬프로그래밍
- 책
- k8s
- 글또
- Gradle
- Today
- Total
목록병렬프로그래밍 (10)
선생님, 개발을 잘하고 싶어요.

여러 개의 스레드에서 객체를 동시에 사용하려 할 때 섞이지 않고 안전하게 동작하도록 객체를 공유하고 공개하는 방법을 살핀다. 크리티컬 섹션? 코드 블록을 동기화할 때 항상 메모리 가시성(Memory Visibility) 문제가 발생한다. 반드시 달성돼야 하는 거 변수를 사용하고 있을 때 다른 스레드가 해당 변수 값을 사용하지 못하도록 막아야한다. 동기화 블록을 빠져나가고 나면 다른 스레드가 변경된 값을 즉시 사용할 수 있어야한다. 가시성 변수에 값을 저장하고 이후에 값을 다시 읽으면, 아까 저장한 값을 가져올 수 있을거라고 예상한다. 하지만 멀티 스레드 환경에서는 특정 변수의 값을 가져갈 때 다른 스레드가 작성한 값을 가져갈 수 없을 수 있다. 심지어 값을 읽지 못할 수 있다. 🌟 메모리상 공유된 변수를..

공유되고 변경할 수 있는 상태에 대한 접근을 관리하는 것이다. 공유됐다 👉 여러 스레드가 특정 변수에 접근할 수 있다. 변경할 수 있다(mutable) 👉 해당 변수 값이 변경될 수 있다는 뜻이다. 스레드 안정성은 코드를 보호하는 게 아니라, 데이터에 제어 없이 동시 접근하는 걸 막으려는 의미 스레드가 하나 이상 변수에 접근하고 + 변수에 값을 쓰면 👉 해당 변수에 접근할 때 관련된 모든 스레드가 동기화를 통해 조율해야 한다. 🌟 어떤 스레드가 변경할 수 있는 상태 변수를 적절한 동기화 없이 접근한다면 그 프로그램은 잘못됐다. 이런 문제를 해결하는 3가지 방법이 있다. 변수를 스레드 간에 공유하지 않는다. (스택에 저장된 변수 접근 등) 변수를 변경할 수 없도록 만든다. 접근할 땐 언제나 동기화를 사용한..