일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 소수
- Codility
- 수학
- Photoshop
- REM
- transform
- Gap
- 통신사할인
- 미디어 쿼리
- 백준
- stl
- spring
- c
- Javascript
- 반응형 웹
- 강화학습
- 알고리즘
- float
- pandas
- grid
- SK바이오사이언스
- 확률
- 상태
- CSS
- 포토샵
- c++
- react
- JSX
- skt membership
- box-sizing
Archives
- Today
- Total
sliver__
[Mastering C++ Programming] - Semaphore 본문
728x90
- 세마포어는 또 다른 유용한 스레드 동기화 메커니즘입니다.
- 그러나 뮤텍스와 달리 세마포어는 둘 이상의 스레드가 유사한 공유 리소스에 동시에 액세스할 수 있도록 합니다.
- 동기화 프리미티브는 두 가지 유형, 즉 이진 세마포어와 카운팅 세마포어를 지원합니다.
- 바이너리 세마포어는 뮤텍스처럼 작동합니다.
- 즉, 어느 시점에서든 하나의 스레드만 공유 리소스에 액세스할 수 있습니다.
- 그러나 차이점은 뮤텍스 잠금은 이를 소유한 동일한 스레드에 의해서만 해제될 수 있다는 것입니다.
- 그러나 세마포어 잠금은 모든 스레드에서 해제할 수 있습니다.
- 다른 주목할만한 차이점은 일반적으로 뮤텍스는 프로세스 경계 내에서 작동하는 반면 세마포어는 프로세스 경계에서 사용된다는 것입니다.
- 뮤텍스와 달리 무거운 잠금이기 때문입니다.
- 그러나 공유 메모리 영역에서 생성된 경우 프로세스 전체에서 뮤텍스를 사용할 수도 있습니다.
- 카운팅 세마포어를 사용하면 여러 스레드가 제한된 수의 공유 리소스를 공유할 수 있습니다.
- 뮤텍스를 사용하면 한 번에 하나의 스레드가 공유 리소스에 액세스할 수 있지만 카운팅 세마포어를 사용하면 여러 스레드가 제한된 수의 리소스(일반적으로 둘 이상)를 공유할 수 있습니다.
- 공유 리소스가 한 번에 하나의 스레드에 액세스해야 하지만 스레드가 프로세스 경계를 넘어 있는 경우 바이너리 세마포어를 사용할 수 있습니다.
- 같은 프로세스 내에서 바이너리 세마포어를 사용하는 것은 바이너리 세마포어가 무겁기 때문에 가능하지만 효율적이지는 않지만 같은 프로세스 내에서도 작동합니다.
- 안타깝게도 C++ 스레드 지원 라이브러리는 C++17까지 기본적으로 세마포어와 공유 메모리를 지원하지 않습니다.
- C++17은 atomic operation이 스레드로부터 안전한지 확인해야 하는 atomic operation을 사용하는 lock-free 프로그래밍을 지원합니다.
- 세마포어 및 공유 메모리를 사용하면 다른 프로세스의 스레드가 공유 리소스를 수정할 수 있습니다.
- Concurrency 모듈이 프로세스 경계를 넘어 atomic 작업의 스레드 안전을 보장하는 것은 상당히 어렵습니다.
- 그러나 스레드 지원 라이브러리에서 제공하는 뮤텍스 및 조건 변수를 사용하여 자신의 세마포어를 구현하는 것을 막지는 않습니다.
- 프로세스 경계 내에서 공통 리소스를 공유하는 사용자 지정 세마포어 클래스를 개발하는 것은 비교적 쉽지만 세마포어에는 명명된 것과 명명되지 않은 두 가지 종류가 있습니다.
- 명명된 세마포어는 까다로운 경계를 넘어 공통 리소스를 동기화하는 데 사용됩니다.
- 또는 명명된 세마포어와 명명되지 않은 세마포어를 모두 지원하는 POSIX pthreads 세마포 프리미티브 주위에 래퍼 클래스를 작성할 수 있습니다.
- cross platform 애플리케이션을 개발하는 경우 모든 플랫폼에서 작동하는 이식 가능한 코드를 작성해야 합니다.
728x90
'CS > C++' 카테고리의 다른 글
[Mastering C++ Programming] - Asynchronous message passing (0) | 2022.12.09 |
---|---|
[Mastering C++ Programming] - Concurrency (0) | 2022.12.09 |
[Mastering C++ Programming] - Condition variable (0) | 2022.12.09 |
[Mastering C++ Programming] - Shared Mutex (0) | 2022.12.09 |
[Mastering C++ Programming] - deadlock (0) | 2022.12.09 |
Comments