일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Gap
- 알고리즘
- 확률
- SK바이오사이언스
- Design Pattern
- Codility
- align-items
- dataframe
- 강화학습
- 소수
- 에라토스테네스의 체
- 포토샵
- stl
- 수학
- spring
- Prefix Sums
- pandas
- grid
- series
- c++
- 통신사할인
- 상태
- c
- Photoshop
- 백준
- Javascript
- CSS
- Flexbox
- margin
- skt membership
- Today
- Total
목록CS/C++ (61)
sliver__
세마포어는 또 다른 유용한 스레드 동기화 메커니즘입니다. 그러나 뮤텍스와 달리 세마포어는 둘 이상의 스레드가 유사한 공유 리소스에 동시에 액세스할 수 있도록 합니다. 동기화 프리미티브는 두 가지 유형, 즉 이진 세마포어와 카운팅 세마포어를 지원합니다. 바이너리 세마포어는 뮤텍스처럼 작동합니다. 즉, 어느 시점에서든 하나의 스레드만 공유 리소스에 액세스할 수 있습니다. 그러나 차이점은 뮤텍스 잠금은 이를 소유한 동일한 스레드에 의해서만 해제될 수 있다는 것입니다. 그러나 세마포어 잠금은 모든 스레드에서 해제할 수 있습니다. 다른 주목할만한 차이점은 일반적으로 뮤텍스는 프로세스 경계 내에서 작동하는 반면 세마포어는 프로세스 경계에서 사용된다는 것입니다. 뮤텍스와 달리 무거운 잠금이기 때문입니다. 그러나 공유..
조건 변수 동기화 프리미티브는 둘 이상의 스레드가 서로 통신하고 특정 신호 또는 이벤트를 수신할 때만 진행해야 하는 경우에 사용됩니다. 특정 신호나 이벤트를 기다리는 스레드는 신호나 이벤트를 기다리기 전에 뮤텍스를 획득해야 합니다. 생산자/소비자 문제가 있는 조건 변수의 사용 사례를 이해해 봅시다. PRODUCER와 CONSUMER라는 두 개의 스레드를 생성하겠습니다. PRODUCER 스레드는 대기열에 값을 추가하고 CONSUMER 스레드에 알립니다. CONSUMER 스레드는 Producer의 알림을 기다립니다. Producer 스레드에서 알림을 받으면 CONSUMER 스레드는 대기열에서 항목을 제거하고 인쇄합니다. 여기에 표시된 Thread.h 헤더가 조건 변수와 뮤텍스를 사용하는 방법을 이해해 보겠습..
공유 뮤텍스 동기화 프리미티브는 공유 및 배타적이라는 두 가지 모드를 지원합니다. 공유 모드에서 공유 뮤텍스는 데이터 경합 문제 없이 많은 스레드가 동시에 리소스를 공유할 수 있도록 합니다. 독점 모드에서는 일반 뮤텍스처럼 작동합니다. 즉, 하나의 스레드만 리소스에 액세스할 수 있습니다. 리소스에 안전하게 액세스할 수 있는 여러 reader가 있고 하나의 스레드만 공유 리소스를 수정하도록 허용하는 경우 적합한 잠금 기본 요소입니다. ++) Reference https://a-researcher.tistory.com/26 [c++] std::shared_mutex en.cppreference.com/w/cpp/thread/shared_mutex std::shared_mutex - cppreference.c..
다중 스레드 응용 프로그램에서는 deadlock 상태에 빠질 때까지 모든 것이 멋지고 흥미롭게 보입니다. READER와 WRITER라는 두 개의 스레드가 있다고 가정합니다. READER 스레드가 WRITER가 이미 획득한 잠금을 기다리고 WRITER 스레드가 READER가 소유한 잠금을 리더가 해제할 때까지 기다리거나 그 반대의 경우 교착 상태가 발생할 수 있습니다. 일반적으로 교착 상태 시나리오에서 두 스레드는 끝없이 서로를 기다립니다. 일반적으로 교착 상태는 설계 문제입니다. 때로는 교착 상태를 빠르게 감지할 수 있지만 때로는 근본 원인을 찾는 것이 매우 까다로울 수 있습니다. 따라서 결론은 동기화 메커니즘을 신중하게 올바른 의미로 사용해야 한다는 것입니다. 교착 상태 시나리오를 생성하기 위해 약간 ..
이제 threadProc 함수를 리팩터링하고 balance를 수정하고 액세스하는 중요한 섹션을 동기화해 보겠습니다. 하나의 스레드만 잔액을 읽거나 쓸 수 있도록 허용하는 잠금 메커니즘이 필요합니다. C++ 스레드 지원 라이브러리는 mutex라는 적절한 잠금을 제공합니다. 뮤텍스 잠금은 하나의 스레드만 동일한 프로세스 경계 내에서 중요 섹션 코드를 작동하도록 허용하는 배타적 잠금입니다. 잠금을 획득한 스레드가 뮤텍스 잠금을 해제할 때까지 다른 모든 스레드는 자신의 차례를 기다려야 합니다. 스레드가 뮤텍스 잠금을 획득하면 스레드는 공유 리소스에 안전하게 액세스할 수 있습니다. #include #include #include #include "Account.h" using namespace std; enum ..
스레드는 더 나은 애플리케이션 성능을 제공합니다. 그러나 다중 스레드로 인해 애플리케이션 성능이 저하되는 것을 인지하는 것은 드문 일이 아닙니다. 이 성능 문제는 실제로 여러 스레드에 연결되어 있지 않을 수 있습니다. 진짜 범인은 디자인일 수 있습니다. 동기화를 너무 많이 사용하면 응용 프로그램 성능 저하를 유발하는 많은 스레드 관련 문제가 발생합니다. Lock-free 스레드 설계는 스레드 관련 문제를 방지할 뿐만 아니라 전체 애플리케이션 성능을 향상시킵니다. 그러나 실제 세계에서는 둘 이상의 스레드가 하나 이상의 공통 리소스를 공유해야 할 수 있습니다. 따라서 공유 리소스에 액세스하거나 수정하는 코드의 중요 섹션을 동기화해야 합니다. 특정 시나리오에서 사용할 수 있는 다양한 동기화 메커니즘이 있습니다..