본문 바로가기

c++

(25)
(c++)Singleton pattern 클래스를 멀티쓰레드에서 안전하게 만드는 방법 프로그램을 구성하다보면, 전역적으로 단일 인스턴스를 가져야 하는 모듈을 만들어야 하는 경우가 분명 있다. 이럴때 싱글톤(Singleton) 패턴으로 클래스를 구성하게 되는데..문제는 이 패턴이 멀티쓰레드에서 안전하지 않다는 것이다. 아래는 일반적인 싱글톤 패턴의 코드이다. 문제는 최초에 두개의 Thread가 연속으로 GetInstance()를 호출 했을때에 instance의 null체크에서 두 thread가 모두 null이 될 가능성이 있다는 것이다.이것을 해결하기위해서는 몇가지 솔루션이 있다. 1. criticalsection 사용 동시에 두 thread의 접근을 방지하여 안전성을 확보하자는 것인데, 문제는 criticalsection이 성능면에서는 별로 좋지 않다고 한다. 2. 최초에 getinsta..
C++ 소프트웨어 개발 프레임워크, push framework 본인은 개인적으로 프레임워크에 신경을 많이 쓰는 편이다. 왜냐하면, 그 프레임워크가 개발 속도나 퍼포먼스, 확장성, 코드 재사용성등에 많은 영향을 끼치기 때문이다.. 원래 자체적으로 C/C++로 개발한 컴포넌트 구조의 프레임워크를 개발하여 사용하고 있는데, 관련 기술적 내용들을 인터넷에서 검색하다가 보게된 오픈소스의 Push Framework라는 것을 봤다. 웹과같은 표준의 요청/응답(Request/Response)형태의 워크플로우를 가지는 프로그램이나 접속된 클라이언트들에게 Stream 데이터를 전송(브로드캐스트를 포함)하는 등의 목적을 위한 프레임워크라고 소개하고 있다. 그리고, 스트림데이터를 브로드캐스팅할때의 클라이언트 상태, 프로세싱, QoS등을 대쉬보드에서 확인할 수 있어서 성능문제에대한 최적화..
ubuntu 13.10 + eclipse(kepler) + boost 1.55.0 설치 및 사용 1. Ubuntu 13.10에 boost c++ library 1.55.0 설치 방법 [참고] http://cccob.blogspot.kr/2013/09/boost-1304-boost-153.html 1.53.0 버젼과 설치방법이 다르지는 않으니.. 위 블로그 내용을 참조. 2. Eclipse Kepler에 boost 설정 (1) 일단 본인은 1.54.0버젼 부터 추가된 boost.log 를 사용하려고 한다. 이클립스에서 c++ 프로젝트를 생성하고 cpp 파일에 다음 샘플 코드를 추가했다. #include #include #include #include namespace logging = boost::log;using namespace std;void SetFilter() { logging::core::..
eclipse에서 boost 사용하는데 에러가 난다.. 음.. 문제를 못 찾겠다.. 타이머를 사용하려고 boost의 chrono를 사용하려고 #include 했는데.. 에러가 난다.. boost는 설치했다. 아래처럼 에러 나는이유.. ./src/xxx_main.o: In function `__static_initialization_and_destruction_0':/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'/usr/include/boo..
ubuntu에 c++ 선형대수 라이브러리 armadillo 설치 1. 설치파일 다운로드 stable 버젼 3.6.2버젼을 다운로드 받는다. 설치는 ubuntu 12.10버젼.- 설치파일 다운로드 : http://arma.sourceforge.net/download.html 2. 설치하기 다운로드 받은 파일의 압축을 푼다. 본인은 다운로드 디렉토리에 풀었다.압축을 푼 디렉토리에서 아래의 명령을 입력한다.[참고] readme.txt파일을 열어보면 설치과정이 잘 설명되어 있다. > cd ~/다운로드/armadillo-3.6.2> cmake .> make> make install readme.txt파일 내용중 설치부분 설명.You can use the manual installation process as described in section 3.2, or the follo..
C++ Linear algebra library C++ 기반 선형대수 라이브러리. 속도도 괜찮다고 함. 참고. http://arma.sourceforge.net
Random number generation using C++ TR1 C++ TR1으로 특정 확률분포를 가지는 랜덤 수를 생성하는 방법 (구현) http://www.johndcook.com/cpp_TR1_random.html http://preshing.com/20111007/how-to-generate-random-timings-for-a-poisson-process http://telliott99.blogspot.kr/2010/02/replot-poisson-example-with-python.html
GoF 디자인 패턴! 이렇게 활용한다. 한빛미디어 / 장세찬 저 / 이 책을 산지는 한 2년가까이된다. 역시 기술이라는 것은 몸으로 익히지 않으면, 내것이 될 수 없다는 말이 맞다. 보면 "아~ 요게 이럴때 쓰면 되겠구나.."라고 싶지만, 책을 덮는순간 그 기억은 short term memory에서 서서히 사라진다. short term memory에 저장된 기억은 어떤 기억보다 빨리 recall될 수 있기때문에, 빨리 체득하여 반사적으로 그 테크닉들이 적시적소에 사용될 수 있도록 연습을 해야한다. 이 책을 다시 보고 있는데.. 보면 새록 새록 기억이 떠오른다. 보다보면 내가 짰던 코드들이 요렇게 디자인하면 훨씬 간결해질텐데 왜 몰랐을까.. 한다.. GoF 디자인패턴.. 이 책은 프로그래밍을 하는 사람이라면 적어도 한번은 봐줘야 하는게 예의(?..