싱글톤(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변수를 이용한 싱글톤 구현은 반드시 해더파일과 분리하자!




















