![[운영체제] 싱글턴 객체에서 상태를 유지하게 설계하면 안되는 이유? (레이스 컨디션)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV5S9Y%2FbtsHx2bkh48%2FVy4qpsJDYBofKrdaxjD7o0%2Fimg.png)
[운영체제] 싱글턴 객체에서 상태를 유지하게 설계하면 안되는 이유? (레이스 컨디션)Back-end/etc..2024. 5. 23. 11:58
Table of Contents
✅ Git
https://github.com/ellaCoo/mvc_programming/commit/1bd5b50b66dadf3342911a5330a7b68f9708d408
출력을 보면 예상과 다른 결과가 나옴
⇒ 싱글턴 객체에서 상태를 유지하게 설계되면 문제가 발생한다!
멀티스레드 환경에서 하나의 객체(자원)를 공유하게 되면 우리가 뜻하지 않은 레이스 컨디션 문제 발생함
✅ 개념
레이스 컨디션
- 두 개 이상의 프로세스 혹은 스레드가 하나의 자원을 서로 사용하려고 경합(Race)하는 상태
= 즉, 여러 스레드가 하나의 자원에 동시에 접근하기 위해 경쟁을 하면서 우리가 원하지 않는 결과가 나옴
⇒ 싱글턴 객체에서 상태를 유지하게 설계되면 Thread-safety 하지 않다!
- 스레드가 안전하다면 우리가 예상한 결과가 나왔어야 하는데 스레드 안전하지 않기 때문에 원치 않은 결과가 나옴
간단한 해결방법 : 동기화 처리 ( synchronized, Lock, Atomic)
'Back-end > etc..' 카테고리의 다른 글
[HTTP] http는 왜 stateless, connectionless할까? (1) | 2024.05.23 |
---|---|
[디자인패턴] 일급 컬렉션이란? +리팩토링 (0) | 2024.05.22 |
[LINUX] jar파일 컴파일 버전 찾기 (0) | 2022.04.27 |
[MyBatis] foreach 사용해서 List<Map<>> INSERT하기 (0) | 2022.02.11 |