Language26 [C++] std::semaphore std::semaphore- C++20 에서 추가됨- 자원에 대한 한정적인 공유 (N개의 쓰레드가 공유)- 헤더 std::counting_semaphorestd::counting_semaphore sem(counter 초기값);counter의 조건 0 sem.counter + update > MAX_COUNT라면 std::system_error#include #include #include #include #include using namespace std::literals;std::counting_semaphore sem(3);void Download(std::string name) { sem.acquire(); // --sem.counter; for (int i = 0; i .. 2025. 10. 27. [C++] std::condition_variable std::condition_variable- 신호(signal) 기반의 동기화 도구- 헤더- std::unique_lock를 사용해야 한다.std::condition_variable의 기본구조Producer - Consumer 구조로 공유자원에 생산자 데이터가 쓰여지면 소비자에서 소비한다.condition_variable은 unique_lock를 기본적으로 사용함에 유의한다.// Consumerstd::mutex m;std::unique_lock ul(m);cv.wait(ul);// Producercv.notify_one();std::condition_variable::wait1. wait(std::unique_lock ul); - wait 함수 내부에서 unique_lock을 unlock하고 sig.. 2025. 7. 14. [C++] std::unique_lock, std::scope_lock, std::shared_lock 1. std::unique_lock// std::unique_lock의 생성자std::mutex m;std::timed_mutex tm;using namespace std::literals;std::unique_lock u1; // 연결된 mutex 없이 unique_lock 객체만 생성std::unique_lock u2(m); // 생성자에서 m.lock()을 수행std::unique_lock u3(m, std::try_to_lock); // 생성자에서 m.try_lock()을 수행std::unique_lock u4(m, std::adopt_lock); // 이미 lock를 획득한 뮤텍스로 초기화std::unique_lock u5(m, std::defer_lock); // unique_lock을 먼.. 2025. 7. 9. [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. 이전 1 2 3 4 5 다음