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

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

Mutex 5

[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

[Concurrency] 다양한 mutex 소개

C++ mutex는 몇 개 알고 계신가요? C++ mutex는 6개이다. 아래 글에서 mutex를 다뤘으니 볼드체로 된 3 가지만 알아볼 텐데, (나머지 2개는 조합이니 관심 있는 분은 개별로 알아보세요.) 이 mutex 들을 통해 아래 이슈에 대한 해결이 가능하게 된다. 1. lock 중에 lock을 호출하여 deadlock이 발생하는 문제 해결 방법은? 2. 공유데이터를 읽을 때 속도를 향상 시키는 방법은? 3. 한정된 시간에 lock에 예외를 발생시키는 방법은? mutex(C++11), recursive_mutex(C++11), shared_mutex(C++17) timed_mutex(C++11), recursive_timed_mutex(C++11), shared_timed_mutex(C++14) ..

L C++/Concurrency 2023.12.19

[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

[Concurrency] race condition 예방 방법 : Mutex와 Semaphore

멀티 스레드로 동작 시 공유 데이터를 동시에 접근하면 경쟁상태(race condition)가 된다. 이전글 참조: 2023.09.19 - [언어/C++] - race condition : thread를 병렬로 그냥 동작시키면 안 되는 이유 데이터를 일관된 상태로 유지하려면 동시 액세스로부터 데이터를 보호해야 하는데 (즉, 데이터에 대한 액세스는 직렬화되어야 한다.) 그 방법을 알아보자. Mutex(뮤텍스) 위 그림에 표현처럼 중요한 섹션은 상호 배제를 보장(critical sections ensure mutual exclusion)하는 방법이 뮤텍스이다. 바로 특정 순간에 하나의 중요 섹션만 공유 데이터에 접근하게 하는 방법이며 이는 데이터 접근에 대한 직렬화를 보장한다. 예제 코드로 좀 더 자세히 확인..

L C++/Concurrency 2023.09.26
320x100