Weitere ähnliche Inhalte
Mehr von YoungSu Son (20)
Kürzlich hochgeladen (20)
Singleton 패턴 (김진영 - EVA, 소마에 10기)
- 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
- 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