κΆλ ₯κ³Ό μΈλ΄κ° 겨룰 λμλ μΈλ΄ μͺ½μ λ΄κΈ° λμ κ±Έμ΄λΌ. βW.B.P.
ο»Ώ * doxygenμ μλ μλ¬Έκ³Ό μ½κ° λ€λ₯Ό μ μμ΅λλ€. μ λ°μ μΈ μλ―Έλ κ°μ΅λλ€.
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>λ₯Ό μμ±ν λ λ€μ 쑰건μ λ§μ‘±μν€λ©΄ λ©λλ€. (μλ μμ μ°Έμ‘°)
- private (λλ protected) μ μΈλΆμ <T>μ μμ±μλ₯Ό μ μΈν κ²
- 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 μΈμ€ν΄μ€λ§λ€ κ°κ° ν λΉλ©λλ€.









![[http]](/wiki/imgs/http.png)
