U E D R S I H C RSS
ID
Password
Join
ꢌλ ₯κ³Ό 인내가 겨룰 λ•Œμ—λŠ” 인내 μͺ½μ— λ‚΄κΈ° λˆμ„ 걸어라. ―W.B.P.

ο»Ώ * doxygen에 μžˆλŠ” 원문과 μ•½κ°„ λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μ „λ°˜μ μΈ μ˜λ―ΈλŠ” κ°™μŠ΅λ‹ˆλ‹€.

Contents

1 κ°„λž΅ μ‚¬μš©λ²•
2 κ°œμš”

1 κ°„λž΅ μ‚¬μš©λ²• #

#include <Singleton.h>

TYPE * ACE_Singleton< TYPE, ACE_LOCK >::instance()
μœ„ ν•¨μˆ˜κ°€ μ „λΆ€λ‹€. 정말 μ‚¬μš©ν•˜κΈ° 쉽닀. :)

2 κ°œμš” #

Singleton Adapter ν΄λž˜μŠ€λŠ” λ³΄ν†΅μ˜ 클래슀λ₯Ό μ΅œμ ν™”λœ Double-Checked Locking optimization νŒ¨ν„΄μ„ λ‚΄μž₯ν•œ μ‹±κΈ€ν†€μœΌλ‘œ λ³€ν™˜ν•˜κΈ°μœ„ν•΄ Adapter νŒ¨ν„΄μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

이 κ΅¬ν˜„μ€ GoF의 싱글톀 νŒ¨ν„΄κ³ΌλŠ” 쑰금 λ‹€λ₯Έ ν˜•νƒœλ₯Ό 띠고 μžˆμŠ΅λ‹ˆλ‹€. 특히, 단일 <ACE_Singleton<TYPE, ACE_LOCK> > μΈμŠ€ν„΄μŠ€λŠ” <TYPE> μΈμŠ€ν„΄μŠ€κ°€ μ•„λ‹Œ <ACE_Singleton<TYPE, ACE_LOCK> > μžμ‹ μ—κ²Œ ν• λ‹Ήλ©λ‹ˆλ‹€. ACE_Object_Manager에 등둝할 수 있기 λ•Œλ¬Έμ—, ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œν• λ•Œ μžλ™μœΌλ‘œ μ†Œκ±°λ˜λ„λ‘ ν•˜λŠ” 것이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 이런 μž‘λ™ κ°œλ…λ•Œλ¬Έμ— (정적) cleanup() ν•¨μˆ˜κ°€ μ œκ³΅λ˜μ–΄μ•Όλ§Œ ν•©λ‹ˆλ‹€. ACE_Singleton ν΄λž˜μŠ€κ°€ 이 ν•¨μˆ˜λ₯Ό μ œκ³΅ν•˜κ³  μžˆμœΌλ―€λ‘œ TYPE ν΄λž˜μŠ€μ—μ„œλŠ” 이λ₯Ό κ΅¬ν˜„ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

만일 ν•˜λ‚˜μ˜ <T>의 싱글톀 μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜μ—ˆλ‹€λŠ” 것을 ν™•μΈν•˜κ³  μ‹Άκ³ , λ‹€λ₯Έ (라이브러리) μ‚¬μš©μžλ“€μ΄ <T>에 λŒ€ν•œ μžμ‹ λ§Œμ˜ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 없도둝 ν•˜λ €λ©΄ <T>λ₯Ό μž‘μ„±ν•  λ•Œ λ‹€μŒ 쑰건을 λ§Œμ‘±μ‹œν‚€λ©΄ λ©λ‹ˆλ‹€. (μ•„λž˜ 예제 μ°Έμ‘°)
  1. private (λ˜λŠ” protected) 선언뢀에 <T>의 μƒμ„±μžλ₯Ό μ„ μ–Έν•  것
  2. ACE_Singleton <T>의 ν”„λžœλ“œ 클래슀둜 μ„ μ–Έν•  것.

class foo
{
  friend class ACE_Singleton<foo, ACE_Null_Mutex>;

  private:
  foo () { cout << "foo constructed" << endl; }
  ~foo () { cout << "foo destroyed" << endl; }

  void test() {...} // ν…ŒμŠ€νŠΈ ν•¨μˆ˜.
};

typedef ACE_Singleton<foo, ACE_Null_Mutex> FOO;
μ‚¬μš©λ²• :
FOO::instance()->test();


μ£Όμ˜μ‚¬ν•­ : ACE_LOCK νƒ€μž…μ— 졜적의 νƒ€μž…μ€ ACE_Recursive_Thread_Mutex와 ACE_Null_Mutexμž…λ‹ˆλ‹€. ACE_Recursive_Thread_MutexλŠ” λ©€ν‹°μ“°λ ˆλ“œ 기반 ν”„λ‘œκ·Έλž¨μ—μ„œ μ—¬λŸ¬ μ“°λ ˆλ“œκ°€ <ACE_Singleton<TYPE, ACE_LOCK>> μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ 접근을 λ™κΈ°ν™”μ‹œν‚΅λ‹ˆλ‹€. ACE_Null_MutexλŠ” 동기화가 ν•„μš”μ—†μ„ λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. 이 두쒅λ₯˜μ˜ 잠금 νƒ€μž…μ΄ 졜적인 μ΄μœ λŠ” 이 싱글톀 μΈμŠ€ν„΄μŠ€κ°€ ACE_Object_Managerμ—μ„œ κ΄€λ¦¬λ˜μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. λͺ¨λ“  ACE_Singleton μΈμŠ€ν„΄μŠ€λ“€μ€ ν•˜λ‚˜μ˜ ACE_Recursive_Thread_Mutex와 ACE_Null_Mutex μΈμŠ€ν„΄μŠ€λ₯Ό κ³΅μœ ν•΄μ„œ μ‚¬μš©ν•˜μ§€λ§Œ, λ‹€λ₯Έ νƒ€μž…μ˜ μž κΈˆμ€ 각각의 ACE_Singleton μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ 각각 ν• λ‹Ήλ©λ‹ˆλ‹€.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.3301 sec