본문 바로가기

C++

(47)
[정리 필요] std::async std::launch::deferred => 비동기 호출을 동일한 스레드에서 => 반환한 future 의 get() 을 호출 할 때 실행된다. std::launch::async => 비동기 호출을 다른 스레드에서 promise future std::async 호출 시, future 를 반환(적절히 템플릿 작성) promise 의 get 을 통해 future 를 반환 => 다른 스레드에서 promise 에 대해서 set_value 혹은 set_value_at_thread_exit() 등을 통해 future 에서 값을 얻도록 할 수 있다 wait_for 등을 사용하면 일정시간 동안만 기다릴 수 있다. => 현재 태스크의 상태 값등을 확인 할 수 있다. ==> future_status::deferred => ..
C++ 멀티 스레딩 - 메모리 모델 [1. 원자계] std::atomic_flag clear() => flag 값을 false 로 test_and_set() => flag 값을 true 로, 읽기와 쓰기 연산이 하나의 원자계 연산으로 수행 된다. 최초 생성 시, ATOMIC_FLAG_INIT 상수를 이용해 false 로 초기화 해야 한다. 잠김 없는 유일한 원자계 더 높은 수준의 스레드 추상화를 위한 빌딩 블록 std::atomic_flag 를 이용한 spinlock 구현 std::atomic
정적 라이브러리 빌드 [1. 개요] 여러개의 소스코드로 이루어진 라이브러리를 정적라이브러리로 빌드 후, main() 함수가 정의 된 소스코드와 같이 컴파일 하는 과정 정리한다. CMake 형태의 C++ 프로젝트의 경우 cmake => make 로 컴파일을 쉽게 할 수 있지만, 새로운 라이브러리를 테스트 해야 하는 경우, 별도의 cmake 를 작성하는 것이 다소 부담스러울 수 있다. 이 경우, gcc(혹은 g++) 와 ar 을 이용하여 라이브러리 빌드 후, main() 과 링킹하여 간단하게 테스트 프로그램을 만들 수 있다. [2. 기본 개념] 정적 라이브러리 빌드는 보통 아래 과정을 거친다. 소스코드에 대해서 object 파일 생성 object 파일을 하나의 archive 파일로 묶는다. 1번 과정에서 gcc (g++) 를 사..
CMake command 정리 2 add_subdirectory (source_dir, [binary_dir], ...) => CMakeLists.txt 가 있는 디렉터리 경로를 source_dir 에 명시하도록 한다. => fd
컴파일 링커 옵션들 [stack, ...] [1. 개요]g++ 로 컴파일 시, 링킹 시 유용한 옵션 정리 [2.1 예제]스택 사이즈 변경g++ -Wl,--stack,1677216 test.cpp함수 호출 시, 이 함수 내 지역에 선언한 buf 의 크기가 꽤 큰 경우,함수 호출 시, 바로 segmentation fault 가 발생할 수 있다.함수 호출을 위해, 컴파일 시, 일정 크기의 스택에 모든 지역 변수를 저장 할 수 있어야 하는데,buf 크기가 이 크기를 벗어나서 문제가 된 것이다.이 경우 디폴트 스택 크기를 꽤 크게 잡아주면 runtime 오류를 해결 할 수 있다.플랫폼 별로 사용 법이 다르다.플랫폼옵션Linux (ELF)-Wl,-z,stack-size=1677216Windows (PE)-Wl,--stack,1677216 [2.2 예제]외..
리눅스 CMake 설치 [1. 개요] centos:7 기준으로 cmake 설치 혹은 업데이트 방법 정리 [2. yum 을 이용한 설치] yum search cmake yum install -y cmake cmake --version yum 이용한 설치 시 cmake version 은 2.8.12.2 최신 버전의 cmake를 설치하려면 아래와 같은 단계를 수행] [3. cmake 최신 버전 설치] github cmake repository 에서 바이너리를 가져와 설치 wget https://github.com/Kitware/CMake/releases/download/v3.25.1/cmake-3.25.1-linux-x86_64.tar.gz tar -zxf cmake-3.25.1-linux-x86_64.tar.gz cd cmake-..
priority_queue https://testkernelv2.tistory.com/315
tbb 라이브러리 설치 [1. 개요] 애플리케이션 개발 시 멀티 코어를 이용한 병렬 처리 기능을 사용하기 위한 tbb 라이브러리 설치 방법등을 기술한다. 소스코드 빌드를 통한 라이브러리 설치는 추후에 작성하도록 한다. 리눅스 기준, mkdir build -> cmake .. -> make -j {cpu} [2. Windows] 아래 tbb gitub 에서 배포 된 아카이브를 다운받도록 한다. https://github.com/oneapi-src/oneTBB/releases 압축을 해제하면 다음과 같은 파일 구조를 갖는다. env include lib -> ia32 (32bit 빌드 시 사용) -> intel64 (64bit 빌드 시 사용) redist [3. Linux] sudo apt update sudo apt instal..
Boost 라이브러리 설치 [1. 개요] Boost 라이브러리를 이용한 애플리케이션 개발을 위한 boost 라이브러리 설치 및 개발 환경 구축에 대한 내용을 기술한다. 소스코드 빌드를 통한 라이브러리 설치는 나중에 다루도록 한다. [2. Windows] boost 라이브러리 설치를 위해 아래 사이트에서 실행 파일을 다운받도록 한다. https://sourceforge.net/projects/boost/files/boost-binaries/ 실행파일이름은 아래와 같은 형식을 갖는다. boost_{version}-msvc-{sdkversion}-{bit}.exe sdk 버전은 visual studio 설치 시 확인 할 수 있는데 아래와 같다. visual studio 2015 v140 visual studio 2017 v141 vis..
GoogleTest 개요 및 설치 [1. 개요] 구글에서 만든 C++ Unit Test Framework 테스트는 독립적이고 반복할 수 있도록 한다. 관련된 테스트를 TestSuite 로 그룹화하여 데이터와 Subroutine 을 공유할 수 있도록 한다. 플랫폼에 종속되지 않다. => 윈도우 / 리눅스 / 맥에서 모두 지원 됨 테스트 실패 시 왜 실패했는지 알려준다. => File / Line / Call Stack? 테스트 자체에 집중 할 수 있도록 해준다. 공유 자원을 테스트 간에 재사용 할 수 있고, 한번 만 실행되는 SetUp / TearDown 와 같은 함수를 사용 할 수 있다. [2. 설치 (윈도우)] 소스코드 다운로드 컴파일 => 소스코드 압축 해제 (가급적 배포버전을 기준으로) https://github.com/google..