Submit Search
Upload
Singleton 패턴 (김진영 - EVA, 소마에 10기)
•
1 like
•
418 views
YoungSu Son
Follow
Singleton 패턴과 DCL 에 대한 관계 설명
Read less
Read more
Technology
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 35
Download now
Download to read offline
Recommended
The Ring programming language version 1.9 book - Part 46 of 210
The Ring programming language version 1.9 book - Part 46 of 210
Mahmoud Samir Fayed
.Net Collection Classes Deep Dive - Rocksolid Tour 2013
.Net Collection Classes Deep Dive - Rocksolid Tour 2013
Gary Short
Artificial Neural Network
Artificial Neural Network
Peter Zhou
Fault Tolerance 패턴
Fault Tolerance 패턴
YoungSu Son
Clean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance Tuning
YoungSu Son
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
YoungSu Son
Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭)
YoungSu Son
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
YoungSu Son
Recommended
The Ring programming language version 1.9 book - Part 46 of 210
The Ring programming language version 1.9 book - Part 46 of 210
Mahmoud Samir Fayed
.Net Collection Classes Deep Dive - Rocksolid Tour 2013
.Net Collection Classes Deep Dive - Rocksolid Tour 2013
Gary Short
Artificial Neural Network
Artificial Neural Network
Peter Zhou
Fault Tolerance 패턴
Fault Tolerance 패턴
YoungSu Son
Clean Code, Software Architecture, Performance Tuning
Clean Code, Software Architecture, Performance Tuning
YoungSu Son
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
인공지능 식별추적시스템 실증랩 구축및 운영 - 평가모델 고도화
YoungSu Son
Prototype 패턴 (심만섭)
Prototype 패턴 (심만섭)
YoungSu Son
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
Chain of Responsibility (심수연 - 소프트웨어 마에스트로 10기)
YoungSu Son
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
YoungSu Son
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기)
YoungSu Son
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
YoungSu Son
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
YoungSu Son
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
YoungSu Son
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법
YoungSu Son
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
YoungSu Son
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
YoungSu Son
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
YoungSu Son
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
YoungSu Son
SW 아키텍처 분석방법
SW 아키텍처 분석방법
YoungSu Son
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
YoungSu Son
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + Genymotion
YoungSu Son
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
YoungSu Son
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
YoungSu Son
[NEXT] GCM을 이용한 게시글 자동 갱신
[NEXT] GCM을 이용한 게시글 자동 갱신
YoungSu Son
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기
YoungSu Son
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
YoungSu Son
오픈소스 Jedis 리펙토링 하기 (redis java 라이브러리)
오픈소스 Jedis 리펙토링 하기 (redis java 라이브러리)
YoungSu Son
URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표
YoungSu Son
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
Ridwan Fadjar
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
Enterprise Knowledge
More Related Content
More from YoungSu Son
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
YoungSu Son
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기)
YoungSu Son
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
YoungSu Son
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
YoungSu Son
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
YoungSu Son
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법
YoungSu Son
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
YoungSu Son
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
YoungSu Son
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
YoungSu Son
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
YoungSu Son
SW 아키텍처 분석방법
SW 아키텍처 분석방법
YoungSu Son
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
YoungSu Son
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + Genymotion
YoungSu Son
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
YoungSu Son
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
YoungSu Son
[NEXT] GCM을 이용한 게시글 자동 갱신
[NEXT] GCM을 이용한 게시글 자동 갱신
YoungSu Son
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기
YoungSu Son
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
YoungSu Son
오픈소스 Jedis 리펙토링 하기 (redis java 라이브러리)
오픈소스 Jedis 리펙토링 하기 (redis java 라이브러리)
YoungSu Son
URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표
YoungSu Son
More from YoungSu Son
(20)
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
생성 패턴 (강태우 - 소마에 10기)
생성 패턴 (강태우 - 소마에 10기)
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101)
DevOps 시대가 요구하는 품질확보 방법
DevOps 시대가 요구하는 품질확보 방법
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
Android 성능 지표와 Oreo 의 개선사항
Android 성능 지표와 Oreo 의 개선사항
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
클라우드 & 모바일 환경에서 알아야 할 성능 품질 이야기
SW 아키텍처 분석방법
SW 아키텍처 분석방법
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
Android Studio 개발 셋팅 + Genymotion
Android Studio 개발 셋팅 + Genymotion
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] GCM을 이용한 게시글 자동 갱신
[NEXT] GCM을 이용한 게시글 자동 갱신
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] Andorid에 MVC 패턴 적용하기
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경
오픈소스 Jedis 리펙토링 하기 (redis java 라이브러리)
오픈소스 Jedis 리펙토링 하기 (redis java 라이브러리)
URQA 삼성 컨퍼런스 발표
URQA 삼성 컨퍼런스 발표
Recently uploaded
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
Ridwan Fadjar
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
Enterprise Knowledge
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
Delhi Call girls
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
Delhi Call girls
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
shyamraj55
🐬 The future of MySQL is Postgres 🐘
🐬 The future of MySQL is Postgres 🐘
RTylerCroy
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
OnBoard
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Igalia
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
naman860154
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
Results
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
Scott Keck-Warren
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
Sujit Pal
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
Maria Levchenko
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Drew Madelung
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
Anna Loughnan Colquhoun
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
HampshireHUG
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
Rafal Los
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
Pixlogix Infotech
Recently uploaded
(20)
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
🐬 The future of MySQL is Postgres 🐘
🐬 The future of MySQL is Postgres 🐘
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
Singleton 패턴 (김진영 - EVA, 소마에 10기)
1.
Singleton Pattern sdk159147@gmail.com
2.
• , (
)
3.
! object: 0x40012a ~
4.
! object: 0x40012a ~
5.
! object: 0x40012a ~
6.
N ! object: 0x40012a ~
7.
object: 0x40012a object: 0x40012a object:
0x40012a object: 0x40012a N . . . . . . N ! ?
8.
? • •
9.
Singleton (1) • private • static
mInstance • data instance
10.
Singleton (2) • getInstance() •
Static
11.
• s1, s2,
s3 add() 3 -> • S1 add() Data: 1 object 0x40012a
12.
• s1, s2,
s3 add() 3 -> • S1 S2 add() add() Data: 1 Data: 2 object 0x40012a object 0x40012a
13.
• s1, s2,
s3 add() 3 -> • S1 S2 S3 add() add() add() Data: 1 Data: 2 Data: 3 object 0x40012a object 0x40012a object 0x40012a
14.
Thread1 Thread2 Thread3 getInstance()
getInstance() getInstance()
15.
object: 0x400120 Thread1 Thread2
Thread3 getInstance() getInstance() getInstance() nullptr ! !
16.
object: 0x400120 Thread1 object: 0x400120 Thread2
Thread3 getInstance() getInstance() getInstance() nullptr ! ! ~
17.
object: 0x400120 Thread1 object: 0x400120 Thread2 object:
0x400128 Thread3 getInstance() getInstance() getInstance() nullptr ! ! ~ nullptr? ! ! ???
18.
? ~ Thread1 Thread2 Thread3 mInstance = nullptr Thread1 mInstance
= nullptr Thread2 mInstance = nullptr Thread3
19.
? ~ Thread1 Thread2 Thread3 mInstance = nullptr Thread1 mInstance
= nullptr Thread2 mInstance = nullptr Thread3
20.
? ~ Thread1 Thread2 Thread3 mInstance = nullptr Thread1 mInstance
= nullptr Thread2 mInstance = nullptr Thread3
21.
? ~ Thread1 Thread2 Thread3 mInstance = 0x400120 Thread1 mInstance
= nullptr Thread2 mInstance = nullptr Thread3
22.
? ~ Thread1 Thread2 Thread3 mInstance = 0x400120 Thread1 mInstance
= 0x400120 Thread2 mInstance = nullptr Thread3
23.
? ~ Thread1 Thread3 mInstance = 0x400120 Thread1 mInstance
= 0x400120 Thread2 mInstance = 0x400128 Thread3 Thread2
24.
! getInstance()+8 cmp mInstance,
0x0 getInstance()+12 jne getInstance()+20 getInstance()+16 mInstance = new Singleton() getInstance()+20 ret • if cmp Jmp instructure .
25.
! getInstance()+8 cmp mInstance,
0x0 getInstance()+12 jne getInstance()+20 getInstance()+16 mInstance = new Singleton() getInstance()+20 ret Thread1 Thread3 Thread2 mInstance = nullptr
26.
Thread1 getInstance()+8 cmp mInstance,
0x0 getInstance()+12 jne getInstance()+20 getInstance()+16 mInstance = new Singleton() getInstance()+20 ret Thread1(getInstance()+8) Thread3 Thread2 mInstance = nullptr
27.
jne instructure getInstance()+8 cmp
mInstance, 0x0 getInstance()+12 jne getInstance()+20 getInstance()+16 mInstance = new Singleton() getInstance()+20 ret Thread1(getInstance()+12) Thread3 Thread2 mInstance = nullptr
28.
mInstance nullptr Thread3 cmp getInstance()+8
cmp mInstance, 0x0 getInstance()+12 jne getInstance()+20 getInstance()+16 mInstance = new Singleton() getInstance()+20 ret Thread1(getInstance()+12) Thread3(getInstance()+12) Thread2 mInstance = nullptr
29.
Thread3 Thread1 getInstance()+8 cmp mInstance,
0x0 getInstance()+12 jne getInstance()+20 getInstance()+16 mInstance = new Singleton() getInstance()+20 ret Thread1(getInstance()+16) Thread2 mInstance = 0x400120 Thread3(getInstance()+12)
30.
mInstance Thread3 getInstance()+8 cmp mInstance,
0x0 getInstance()+12 jne getInstance()+20 getInstance()+16 mInstance = new Singleton() getInstance()+20 ret Thread1(getInstance()+20) Thread2 Thread3(getInstance()+16) mInstance = 0x400120 Thread1 mInstance = 0x400128 Thread3
31.
• race condition mutex
thread . • ! Mutex !
32.
DCL (Double Checked Locking) •
Locking , if . -> lock
33.
DCL (Double Checked Locking) •
instance , lock .
34.
DCL (Double Checked Locking) •
Locking thread-safe . instance .
35.
object: 0x40012a object: 0x40012a object:
0x40012a object: 0x40012a object: 0x40012a Only One Object, Same Instance! ~
Download now