동기화 정보

리소스에 대한 액세스를 동기화하려면 대기 함수 중 하나에서 동기화 개체 중 하나를 사용합니다. 동기화 개체의 상태는 신호 상태이거나 비신호 상태입니다. 대기 함수를 사용하면 지정된 서명되지 않은 개체가 신호 상태로 설정될 때까지 스레드가 자체 실행을 차단할 수 있습니다. 자세한 내용은 프로세스 간 동기화를 참조하세요.

올바른 동기화 기본 형식 선택

원시적인 Scope Performance 재진입 사용 시기
SRW(슬림 판독기/기록기) 잠금 단일 프로세스 빠름(일반적으로 사용자 모드이며, 경합 시 커널 모드로 들어갈 수 있음) No 최신 코드에서 읽기 작업이 많은 워크로드에 대한 기본 선택입니다. 가장 작은 메모리 공간(포인터 크기)입니다.
중요 섹션 단일 프로세스 빠름(스핀 후 커널 대기) 한 프로세스 내에서 재진입/재귀 잠금이 필요한 경우에 사용합니다. SRW보다 약간 큼.
뮤텍스 교차 프로세스(명명됨) 느림 (항상 커널 개체) 명명된 뮤텍스를 통해 프로세스 간 동기화에 필요합니다. WaitForMultipleObjects와 함께 사용해도 유용합니다.
세마포어 교차 프로세스(명명됨) 커널 개체 N/A 리소스 풀에 대한 동시 액세스를 제한합니다(예: N 항목의 연결 풀).
Event 교차 프로세스(명명됨) 커널 개체 N/A 스레드/프로세스 간의 신호. 데이터 보호가 아닌 "발생한 일" 알림에 사용합니다.
C++ std::mutex / std::shared_mutex 단일 프로세스 구현 정의 No 이식 가능한 C++ 코드 및 RAII에 선호됩니다. Win32 대기 API 또는 프로세스 간 동기화가 필요하지 않은 경우에 사용합니다.

메모

SRW 잠금 및 중요 섹션: 재귀 잠금이 필요하지 않은 새 코드의 경우 SRW 잠금(AcquireSRWLockExclusive/AcquireSRWLockShared)을 선호합니다. 더 작고 빠르며 판독기/작성기 의미 체계를 지원합니다. 동일한 스레드에서 재진입(재귀) 획득이 필요한 경우에도 중요한 섹션이 적합합니다.

Important

일반적인 실수: 임계 영역 또는 SRW 잠금으로 충분한 경우 프로세스 내 동기화에 뮤텍스를 사용하는 것. 뮤텍스에는 항상 커널 모드 전환이 포함되므로 단일 프로세스 내에서 빈도가 높은 작업의 경우 훨씬 느려집니다.

다른 동기화 메커니즘은 다음과 같습니다.

동기화에 대한 자세한 내용은 동기화 및 다중 프로세서 문제를 참조하세요.