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

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

c++20 6

new/delete 동작 원리 이해하기

💬 C++ core guidelines에 따르면 메모리 관리는 RAII가 되는 smart pointer를 권장하고 있다.하지만 이미 레거시 코드에 녹여져 있는 new/delete는 어떻게 해야 하나?🤔 또 malloc/free는?😨C++에서 malloc/free를 못 본 것 같긴 하지만 간단히 new/delete와의 차이점을 정리하고 new/delete를 좀 더 쪼개서 동작시키는 내용을 정리해 본다. 🚀 우선 new/delete 동작 원리를 알아보자.Examplenew/delete를 사용한 프로그램 코드이다.class Point{ int x, y;public: Point(int a, int b) { std::cout ResultPoint()~Point() 주석 1, 2의 동작 원리를 정..

L C++ 2024.07.22

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

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

L C++/Concurrency 2024.01.19

[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

[Concurrency] std::jthread - join 없이 사용하기📌

C++에서 join(혹은 detach) 없이 사용할 수 있는 thread는? 바로 jthread와 async가 떠오르지 않았다면 본 글에서 std::jthread를 알아보자. (async는 아래 글 참조) 2023.11.21 - [L C++] - [thread] std::async - 기존 함수 그대로 thread에 적용(2) std::jthread 란? C++ 20에 추가된 클래스로, 모듈에 포함되어 있고, 크게 두 가지 기능을 가지고 있는 스레드이다. joining thread : 클래스에 join이 포함되어 있어 따로 join을 하지 않아도 된다. cooperatively interruptible : 협력적으로 중단(취소)이 가능하다. Joining thread(스레드 결합) 주 스레드가 종료하면 ..

L C++/Concurrency 2023.11.28

[Concurrency] Semaphore in C++20

2023.09.26 - [언어/C++] - [thread] race condition 예방 방법 : Mutex와 Semaphore 이전 글에 Binary Semaphores 예제는 semaphore.h에 세마포어를 사용했는데 c++20부터 지원되는 를 이용해서 세마포어에 대해 좀 더 알아보자. Binary Semaphore, C++20 이전 글, Binary Semaphores 예제를 조금 변영하여 의 사용방법을 확인해 보자. 예제 아래 프로그램은 5개의 스레드가 각각 숫자 100개를 출력하는 Binary Semaphore 예제이다. #include #include #include #include #include #include using namespace std::literals; // mutex : ..

L C++/Concurrency 2023.10.17

[compiler] MinGW 환경에서 C++20 lib 사용 시 컴파일 에러 해결

C++20에 포함되어 있는 lib를 사용하려고 -std=c++20 옵션을 넣고 컴파일을 했더니 에러가 발생하였는데 그 해결방법을 찾아보자. C++20 lib 사용 시 컴파일 에러 에러메시지에 나와있듯이 -std=c++2a로 유도를 하고 있어서 컴파일 옵션을 변경 후 다시 컴파일을 해보았다. 구글링을 했을 때는 이렇게 해결된 글을 봤는데 나의 경우에는 여전히 해결이 안 되었다. 에러 원인 파악 에러 내용 자체는 간단하다. 컴파일러가 해당 lib를 지원(포함) 하지 않는 것이다. 우선 자신이 가지고 있는 버전확인을 해보자. (이전에도 컴파일 에러가 나서 MinGW를 새로 설치를 했는데 그때 설치한 버전이 gcc version 8.1.0였다.) https://jabdon4ny.tistory.com/75#버전확..

1
320x100