SW 그리고 아빠 엔지니어링 중...

아는 만큼 보이고, 경험해봐야 알 수 있고, 자꾸 써야 내 것이 된다.

전체 글 128

작은 집에서 행복한 아이로 키우기

쑥쑥이는 작고 낡은 아파트에 살고 있다. 하루가 다르게 자라나는 쑥쑥이 이기에 그때마다 당근으로 물건을 나누고 받기를 하며 공간에 맞게 사용하고 있다. 쑥쑥이가 걷기 시작했다. 걷는 재미에 왔다 갔다 하지만 그리 돌아다닐만한 공간도 없고, 그 공간마저도 장애물 천지다. 그러다 넓은 집에 놀러 갔는데 땀을 뻘뻘 흘리며 돌아다시는 게 아닌가? "아 이렇게 좋아하는데.. 넓은 집으로 이사 가야 하나?" 라고 막연히 고민하고 있을때 강형욱의 게스트 쇼에 박완규 편을 보고 자연스레 고민이 해결되었다. 그렇지! 맞다! 생각해 보면 쑥쑥이 부모는 심각한 집돌이/집순이지만 쑥쑥이가 태어난 이후로 하루종일 집에 있는 경우가 별로 없다. 쑥쑥이가 자신의 생각을 말할 수 있을 때가 되면 어떤 말을 할진 모르겠지만 적어도 집..

modern C++ Concurrency 기술 공부를 위하여✔

Modern C++에 Concurrency 기술 공부를 얼추 끝냈다.(~C++20) Concurrency 기술을 공부하면서 느낀 것은 필요한 부분만 보면 잘 이해가 되지 않았던 점 같다. 그래서 스택처럼 이해를 쌓아가기 위해 포스팅을 시작했었고 전반적인 내용에 대한 정리가 끝이나 공부 순서를 목차로 정리하였으니 Concurrency 기술을 이해해보고자 하는 분들에게 도움이 되었으면 한다. Modern C++에 Concurrency 기술 study 목차 [Utilities] std::reference_wrapper (std::ref) : thread를 잘 사용하기 위해 필요한 템플릿 클래스 [Utilities] thread를 잘 사용하기 위한 std::reference_wrapper (std::ref) (..

L C++/Concurrency 2024.02.06

memory order 조정 이야기

프로그램 코드들은 기계어로 변환되어 메모리에 올라가고 fetch, decode, execute를 반복하며 수행이 된다. L fetch(명령어 가져오기) decode (명령어 해석하기) execute (명령어 실행기) 이때 메모리 순서라고 하는 것은 결국 CPU가 메모리에 있는 명령어를 읽는 순서를 말하는데 pc -> 0x0000 mov .... 0x0001 add .... 0x0002 mov .... *pc (프로그램 카운터) 이 순서가 컴파일 시 컴파일러에 의해 혹은 런타임 중에 CPU에 의해 조정될 수 있기에 이에 대해 알아보자. CPU에 의해 조정되는 메모리 순서아래 표에도 나와있지만 모든 CPU가 메모리 순서 조정을 지원하진 않는다. 전통적인 아키텍처인 X86과 AMD, 즉 당신의 PC는 메모리 ..

L C++/Concurrency 2024.01.30

[Concurrency] lock-free와 mutex사이 spin lock

2024.01.16 - [L C++] - [Concurrency] ❇ std::atomic ❇의 이해 이전 글에서는 lock-free 관점에서 쓰다 보니 spin lock은 쓰면 안 되는 것처럼 생각할 수 있는데 본 글에서 spin lock의 필요성에 대해 이야기하고자 한다. spin lock의 필요성 이해 context switching에 따른 오버헤드 발생 Context switching은 CPU가 현재 실행 중인 프로세스나 스레드를 중단하고 다른 프로세스나 스레드를 실행하는 작업을 말한다. 우선 아래 예제를 보자. 예제 1 두 개의 스레드가 공유 데이터를 호출하는데 공유 데이터 접근은 mutex로 처리한 프로그램 코드이다. #include #include #include #include std::m..

L C++/Concurrency 2024.01.23

[Concurrency] 동기화 기본 요소(synchronization primitive) 정리

각각의 동기화 기본 요소 리포팅이 완료되어 전체를 일괄 정리해 보자. 각각의 동기화 기본 요소(synchronization primitive)를 정리해 보면 다음과 같다. (각 요소의 세부 내용은 제목에 링크를 걸어 놨다.) Condition variables (C++11) 조건 변수는 여러 스레드가 서로 통신할 수 있도록 하는 동기화 기본 요소입니다. 이를 통해 일정 수의 스레드가 다른 스레드로부터 진행될 수 있다는 알림을 기다릴 수 있습니다(시간 초과 가능). 조건 변수는 항상 뮤텍스(Mutex)와 연결됩니다. Semaphores (c++20) 세마포어는 공유 리소스에 대한 동시 액세스를 제한하는 데 사용되는 경량 동기화 기본 요소입니다. 둘 중 하나라도 충분할 경우 세마포어는 조건 변수보다 더 효율..

L C++/Concurrency 2024.01.19

[Concurrency] ❇ std::atomic ❇의 이해

발행 : 2014/01/16 수정 : 2014/01/20 - atomic에 대한 전체 내용에 대한 링크 추가 - 메모리 오더 옵션에 대한 정보 추가 - gcc에서 is_lock_free 가 에러 나는 이유 추가 본 글을 atomic 중 lock free에 대해 중점적으로 설명한 내용입니다. (상세 설명은 제일 밑 참고에 링크를 추가하였습니다.) atomic의 사전적 의미 원자성(原子性, atomicity)은 어떤 것이 더 이상 쪼개질 수 없는 성질을 말한다. 어떤 것이 원자성을 가지고 있다면 원자적(atomic)이라고 한다. 생각해 봅시다. C++ 코드에서 원자적인 것은 어떤 것이 있을까요? 한 줄짜리 코드인 x++ 는 원자적일까요? 정답은 아니다. 한 줄짜리 x++을 기계어로 변환하면 아래와 같이 3개..

L C++/Concurrency 2024.01.16

[Concurrency] C++20 스레드 조정 메커니즘 std::latch와 std::barrier

C++20부터 latch and barrier 가 필요한 이유? 2023.11.28 - [L C++] - [Concurrency] std::jthread - join 없이 사용하기📌 C++ 20부터 join을 알아서 해주는 jthread가 생겼다. 하지만 기존 thread를 대체하기에는 아직 문제가 있는데 어떤 문제가 있는지 아래 의사코드(pseudocode)에서 확인해 보자. main() { std::thread() together_working() std::join() after_working() } : thread와 동시에 together_working이 실행되고, 스레드 종료 이후에 after_working이 실행되었던 것을 main() { std::jthread() together_working..

L C++/Concurrency 2024.01.09

생애 첫 해외 여행

올해 8월 어머니가 칠순을 맞이하셨다. 일본으로 해외여행을 다녀오고 싶다고 하셨었기에 일정을 조율하여 11월에 비행기 표를 끊었다. 쑥쑥이는 만 2세가 안되어서 거의 공짜(항공료 19,500원은 냄)로 탈 수 있었는데, 아이가 공짜로 비행기에 탈 수 있다는 기쁨보다 '우리 애가 과연 비행기를 잘 탈 수 있을까?' '너무 울어서 이러지도 저러지도 못하는 상황이 되는 건 아닐까?' '공짜로 탄 것도 모자라 다른 사람들에게 민폐를 끼치는 건 아닐까?' 등등의 고민이 많았지만 정해진 일정이라가 긴장을 하고 비행기 탑승! 두둥! 이/착륙 시 흔들림, 귀가 먹먹해지는 이질감까지 모두 무반응! 😆 너무 얌전히 있다 보니 승무원도 너무 얌전하고 대견하다고 귀여워해주셨다. 기타 정보 1. 해외 출국 장기주차 운서역에 주..

[Concurrency] mutex의 lock/unlock 관리 도구 소개 (2/2)

이전 글에서 2023.12.29 - [L C++] - [Concurrency] mutex의 lock/unlock 관리 도구 소개 (1/2) RAII 원칙을 지키는 mutex의 lock/unlock 관리도구를 2가지 소개했는데 나머지 2가지를 알아보자. std::lock_guard (C++11) std::scoped_lock (C++17) std::unique_lock (C++11) std::shared_lock (C++14) std::unique_lock Since C++11 unique_lock은 기능이 많다. (lock_guard를 포함한 확장 버전이라고 생각하면 좋을 것 같다.) 예제를 통해서 unique_lock의 특징을 확인해 보자. 예제 1-1 unique_lock의 특징을 테스트한 프로그램 ..

L C++/Concurrency 2024.01.02

[Concurrency] mutex의 lock/unlock 관리 도구 소개 (1/2)

이전 글에서 2023.12.19 - [L C++] - [Concurrency] 다양한 mutex 소개 deadlock 방지 사례와 성능 향상에 대한 mutex 소개가 있었는데 C++ Core guidelines에 보면 lock()/unlock()을 직접 사용하지 말라고 합니다. 😨 CP.20: Use RAII, never plain lock()/unlock() * RAII : Resource Acquisition Is Initialization. (자원의 획득은 초기화 과정이다. => 자원의 획득은 (자원관리 객체의) 초기화 과정이다. => 자원 관리는 항상 생성자/소멸자에 의존해라.) 왜? mutex 사용 시 RAII를 쓰라고 하는 이유에 대해 함께 알아봅시다. mutex 사용 시 RAII를 쓰라고 하..

L C++/Concurrency 2023.12.29
320x100