xylosper's notebook

검색 :
RSS 구독 : 글 / 댓글 / 트랙백 / 글+트랙백

글 검색 결과

singleton
글 1개

static 변수를 이용한 싱글톤 구현시 주의할 점

2008/09/17 16:28, 글쓴이 xylosper
어제 하루 종일 낑낑대던 문제가 있었습니다.
싱글톤(singleton)을 이용한 객체를 가져다 쓰는 부분에서 자꾸 segmentation fault가 발생하는 것입니다.

싱글톤의 구현 자체는 다음과 같이 C++에서 극히 일반적인 static변수를이용한 구현입니다.

class Singleton {
public:
    static Singleton *get() {static Singleton self; return &self;}
private:
    Singleton() {}
};

싱글톤 자체는 공유라이브러리에 들어있고, 이것을 서로 다른 두 바이너리에서 동시에 가져다 쓰는 형태인데요, 딱히 서로 다른 쓰레드에서 가져다 쓰는 것도 아니기 때문에, 멀티쓰레딩 환경에서의 static변수로 인한 문제도 없을 것이라 생각하여 별 신경 안썼었습니다.

그런데 이부분에 죽어대니 도대체 원인을 알수 없더군요...

그러던중 구글링 하다가 다음과 같은 글을 발견하였습니다.

function static 스타일의 Singleton 버그?

결론은, Singleton::get()함수가 인라이닝되는 바람에, 싱글톤이 싱글톤이 아니게 된 것이었습니다.

Singleton::get()함수의 구현을 cpp파일로 뺐더니 잘 돌아가네요-_-;

오늘의 교훈: static변수를 이용한 싱글톤 구현은 반드시 해더파일과 분리하자!
2008/09/17 16:28 2008/09/17 16:28

맨 위로