본문 바로가기

Language/C++13

[C++] std::shared_mutex 위 그림처럼 하나의 쓰레드가 읽는 동안 다른 쓰레드도 읽어야 할 경우 shared_mutex를 사용한다. 1. std::shared_mutex를 사용하지 않은 경우#include #include #include #include #include #include using namespace std::literals;std::mutex m;int shared_data = 0;void Writer() { while(1) { m.lock(); shared_data += 1; std::cout 위 코드의 결과는 Writer : 1Reader(A) : 1Reader(B) : 1Reader(C) : 1Writer : 2Reader(A) : 2Reader(B) : 2Reade.. 2025. 7. 8.
[C++] std::timed_mutex, std::recursive_mutex std::timed_mutex일반적인 std::mutex와 사용성은 완전 동일하지만, 맴버 함수의 차이가 있다. std::mutexstd::timed_mutexlockOOtry_lockOOunlockOOnative_handle(OS단의 핸들을 얻는 함수)OOtry_lock_forXOtry_lock_untilXO std::recursive_mutex하나의 스레드가 "여러번 뮤텍스 소유" 가능.소유한 횟수 만큼 unlock() 해야한다.어떤 경우에 사용할까?// std::recursive_mutex 사용 예시class rMutex {private: int shared_data = 0; std::recursive_mutex m; public: void f1() { m.lock();.. 2025. 2. 3.
[C++] std::jthread std::thread 사용시 - 반드시 join 또는 detach 해야한다. std::jthread - C++20 에서 추가된 새로운 스레드 클래스 -  - 소멸자에서 join을 해준다.#include #inlcude #include using namespace std::literals;void foo(int a, double b) { std::cout  jthread에서 stop token 예제#include #include #include using namespace std::literals;void foo() { for (int i = 0 ; i 2025. 1. 6.
[C++] std::async std::async- 주어진 함수를 비동기 (asynchronous)로 수행하는 함수 템플릿- 기존에 작성된 함수를 간단하게 스레드로 수행할 수 있다.- 일반적인 구현은 스레드 풀 사용- std::future 반환 1. std::async 기본 예제#include #include #include #include using namespace std::literals;int add(int a, int b) { std::this_thread::sleep_for(2s); return a+b;}int main() { std::future ft = std::async(add, 10, 20); std::cout - 위 예제에서 ft.get()을 호출하지 않아도 future의 소멸자에서 get()을 호출하여.. 2024. 12. 20.
[C++] std::packaged_task 멀티쓰레드를 고려하지 않은 일반 함수에 대해서 값을 꺼내오고 싶을때 사용std::packaged_task 예제#include #include #include int add(int a, int b){ std::cout task(add); std::future ft = task.get_future(); std::thread t(std::move(task), 10, 20); int ret = ft.get(); std::cout 2024. 12. 18.
[C++] std::promise, std::future std::promise - 스레드 사이에서 "값 또는 예외를 공유" 할 수 있는 템플릿 - 헤더 - promise 통해서 전달된 데이터는 std::future를 통해서 얻을 수 있다. - set_value()는 한번만 사용할 수 있다. - future()는 한번만 꺼낼 수 있다.std::future 멤버 함수 - get() : 결과를 꺼내기. (한번만 사용 가능) - wait() : 결과값이 준비될 때까지 대기 - wait_for() : 주어진 시간 만큼 대기 - wait_until() : 주어진 시간까지 대기   -> wait_for/wait_until 함수의 반환값      - std::future_status::ready : 결과값이 준비 됨.      - std::future_status::ti.. 2024. 12. 4.