Soumettre la recherche
Mettre en ligne
Singleton 패턴 (김진영 - EVA, 소마에 10기)
•
1 j'aime
•
418 vues
YoungSu Son
Suivre
Singleton 패턴과 DCL 에 대한 관계 설명
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 35
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
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
Recommandé
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
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
Slibray Presentation
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
NavinnSomaal
Contenu connexe
Plus de 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
Plus de 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 삼성 컨퍼런스 발표
Dernier
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
Slibray Presentation
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
NavinnSomaal
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
Commit University
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
Alfredo García Lavilla
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
null - The Open Security Community
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
Miki Katsuragi
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
UiPathCommunity
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
Manik S Magar
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
gvaughan
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
Hervé Boutemy
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
comworks
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
BookNet Canada
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
Mattias Andersson
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
Dubai Multi Commodity Centre
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
charlottematthew16
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
Addepto
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
Fwdays
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
Curtis Poe
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
Sergiu Bodiu
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
hariprasad279825
Dernier
(20)
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
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! ~
Télécharger maintenant