본문 바로가기

Robotics/Software Tech.

(148)
(c++)Singleton pattern 클래스를 멀티쓰레드에서 안전하게 만드는 방법 프로그램을 구성하다보면, 전역적으로 단일 인스턴스를 가져야 하는 모듈을 만들어야 하는 경우가 분명 있다. 이럴때 싱글톤(Singleton) 패턴으로 클래스를 구성하게 되는데..문제는 이 패턴이 멀티쓰레드에서 안전하지 않다는 것이다. 아래는 일반적인 싱글톤 패턴의 코드이다. 문제는 최초에 두개의 Thread가 연속으로 GetInstance()를 호출 했을때에 instance의 null체크에서 두 thread가 모두 null이 될 가능성이 있다는 것이다.이것을 해결하기위해서는 몇가지 솔루션이 있다. 1. criticalsection 사용 동시에 두 thread의 접근을 방지하여 안전성을 확보하자는 것인데, 문제는 criticalsection이 성능면에서는 별로 좋지 않다고 한다. 2. 최초에 getinsta..
Odroid에서 부팅시 root 계정으로 로그인 일반적인 경우라면 이렇게 해서는 안되겠지만, 어떤 이유에서 root계정으로 바로 부팅을 해야하는 일이 생겼다.그 방법을 기록해 둔다. $ sudo vim /etc/lightdm/lightdm.conf.d/12-autologin.conf #autologin-user=odroidautologin-user=root #이걸로 교체해준다. $ reboot 이렇게하면 일단 root로 로그인이 되지만, x윈도우에서 아래와 같은 에러를 띄울지도 모른다. Error found when loading /eoot/.profile : stdin: is not a tty 이럴때는 .profile을 수정하면 된다. $ vim .profile #mesg ntty -s && mesg n #이렇게 교체하면 된다. 그러면 일단 에러메세..
Cygwin + Eclipse에서 STL unresolved inclusion문제 리눅스에서 개발을 하다가 다른 컴퓨터에서도 동일한 환경을 셋팅하고 싶은데, 어쩔수 없이 윈도우 환경으로 꾸며야 해서 cygwin, eclipse로 환경을 구성하였다.그런데, 아래처럼 STL 헤더를 include하면 unresolved inclusion 문제가 생긴다. 컴파일에는 문제가 안생기는데, 코딩시 eclipse가 indexing을 못해서 intellisense같은 code assist를 사용못하게 된다. 이 문제를 해결하려면,Project Properties > C/C++ General > Processor Included Paths, Macros, etc > Provider 탭에서 CDT GCC Built-in Compiler Settings Cygwin을 선택하면 된다.
gtk에서 Gtk-WARNING **: Theme parsing error: buttons.css.. 에러의 원인.. glade로 ui 폼을 구성하고, 파일을 로드하여 gtk기반의 프로그램을 구성할때.. 실행을 하면 이런 에러가 뜰때가 있다. 프로그램이 죽는건 아닌데, 잠재적인 문제로 남을까싶어.. 구글링을 통해 문제점이 어디에 있는지 확인해봤더니.. 결국 개발환경에서 사용하는 gnome의 테마때문이라는 사실을 알았다. '기능개선도구' 또는 tweak-tool 에서 테마의 GTK+ 부분이 내가 사용하는 테마에서는 Orchis 인데, 이것을 기본인 Adwaita로 바꿔주니 에러가 발생하지 않는다.. 관련된 에러는 다음과 같이 떴다. Gtk-WARNING **: Theme parsing error: buttons.css:52:8: Missing name of pseudo-classGtk-WARNING **: Theme pa..
컴포넌트 소프트웨어 엔지니어링 자료. 구글링으로 가져옴.
C++ 소프트웨어 개발 프레임워크, push framework 본인은 개인적으로 프레임워크에 신경을 많이 쓰는 편이다. 왜냐하면, 그 프레임워크가 개발 속도나 퍼포먼스, 확장성, 코드 재사용성등에 많은 영향을 끼치기 때문이다.. 원래 자체적으로 C/C++로 개발한 컴포넌트 구조의 프레임워크를 개발하여 사용하고 있는데, 관련 기술적 내용들을 인터넷에서 검색하다가 보게된 오픈소스의 Push Framework라는 것을 봤다. 웹과같은 표준의 요청/응답(Request/Response)형태의 워크플로우를 가지는 프로그램이나 접속된 클라이언트들에게 Stream 데이터를 전송(브로드캐스트를 포함)하는 등의 목적을 위한 프레임워크라고 소개하고 있다. 그리고, 스트림데이터를 브로드캐스팅할때의 클라이언트 상태, 프로세싱, QoS등을 대쉬보드에서 확인할 수 있어서 성능문제에대한 최적화..
동적으로 로딩된 shared library에서 메인 프로그램에 포함된 함수의 호출 방법 linux에서 shared library를 만들고 그 라이브러리에서 메인 프로그램의 일부 기능들을 사용해야 할 경우가 발생하였다. 참고 : http://stackoverflow.com/questions/17081131/how-to-call-a-function-in-the-main-program-from-a-dynamically-loaded-shared-libr -Wl, --export-dynamic 옵션을 이용하는 방법도 있다는 것.(난 몰랐네..)
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::..