C++
-
CPU에 따른, 프로그램에서의 효율적 스레드의 수프로그래밍 2014. 5. 23. 05:58
하나의 프로그램에서 멀티 스레드를 사용할 때, [(하드웨어 스레드 컨텍스트 수 * 2) + 1]만큼을 사용하면 효율이 좋다고 한다. C++11에서부터 지원하는 std::thread에 hardware_concurrency()라는 멤버 함수가 있는데 이는 하드웨어의 스레드 컨텍스트 수를 반환한다.(만약, hardware_concurrency()를 사용할 수 없는 경우라면 0 을 반환) CPU 하나에, 코어가 4개 달린 CPU를 사용중이라면 결과는 4가 나온다.(하이퍼 스레딩 같은 기술을 지원한다면 결과가 다를 수 있다.) 출저: http://jacking.tistory.com/1061
-
구글 C++ 스타일 가이드 - 이름 짓기프로그래밍/c++ 2014. 5. 2. 23:57
구글 C++ 스타일 가이드 - 이름 짓기(Google C++ Style Guide - Naming) 1. 일반적인 이름 규칙 함수, 변수, 파일 이름은 설명적이어야 하므로 가급적 축약하지 않는다. 타입과 변수는 명사, 함수는 명령 동사로 쓴다. - 이름 짓기 이름은 가급적 설명적이어야한다. 다음은 좋고 나쁜 예이다. //좋은 예 int num_errors; int num_completed_connections; //나쁜 예 int n; int nerr; int num_comp_conn; - 약어 프로젝트 외에서도 잘 알려진 약어가 아니라면 축약하지 사용하지 않는다. // 좋은 예 int num_dns_connections; // dns는 외부에 많이 알려진 약어이다. openDvdPlayer(); // ..
-
[c++11] std::mutex프로그래밍/c++ 2014. 4. 27. 13:14
쓰레드(thread)를 사용하다보면 하나의 자원에 동시에 접근하는 경우가 있는데, 이를 방지하기 위해 사용하는 표준 라이브러리에서 제공하는 객체(C++11) 헤더 선언 std::mutex mutex; lock() 뮤텍스를 소유를 시도함. 뮤텍스를 소유할 때까지 쓰레드는 대기. unlock() 뮤텍스의 소유권을 놓음. 쓰레드 소유를 대기한(lock을 호출한) 쓰레드가 있다면 소유권은 다른 쓰레드에게 넘어간다. try_lock() bool을 반환. 기존의 lock은 소유권을 받을 때까지 대기에 들어갔다면, 이 함수는 호출 되는 순간 소유권을 얻어내지 못하면 false를 반환. 공유된 자원이 다른 쓰레드에서 사용중이라면(try_lock 반환값이 false라면), 다른 작업을 하는 식으로 사용이 가능. ++ 윈..
-
boost singleton_pool의 사용프로그래밍 2014. 4. 20. 01:02
boost의 메모리 풀 관련 라이브러리 중 하나인 boost::singleton_pool은 전역적인 메모리 풀로 스레드에 대해 안전(thread-safe)하다. 사용 시, 템플릿 인자로 태그(tag)의 역할을 할 더미 클래스와 pool이 할당하는 사이즈를 받는다.똑같은 용량을 할당하는 메모리 풀이라도, 태그가 다르면 공유하지 않는 메모리 풀을 사용한다. (태그의 이름을 변수 이름이라고 생각해도 괜찮다.) struct pool_tag{}; class test_class { public: test_class(){} test_class(int a, int b, int c){} test_class(int a, int b, int c, int d){} }; typedef boost::singleton_pool< ..