2010-02-23 5 views
2

이것은 오랫동안 나를 당황하게했습니다.조건 변수는 어떻게 구현됩니까?

compare & 스왑 같은 기본 원자 기본형을 감안할 때 스핀 록 (mutex를 빌드 할 수 있음)을 구현하는 방법을 알 수 있습니다.

그러나 조건 변수를 어떻게 구축 할 수 있는지는 알 수 없습니다. 어떻게 이뤄지나요?

답변

2

특히 간단하지 않습니다. 다음은 Douglas Schmidt (ACE 라이브러리를 주로 담당)가 Win32 (Vista 이전)에서 사용할 수있는 동기화 프리미티브를 사용하여 Windows에서 조건 변수를 구현하는 몇 가지 방법에 대한 세부 정보 링크입니다.

결론을 (결론 발언) :

접근 방법은 접근 방법 만 어떤 OS의 기본 요소에 일반적으로 사용 가능한 기본 및 설명 다양한 제한을 사용하여 포함

이 기사에서는 Win32 플랫폼에서 조건 변수를 개발하는 것이 왜 까다 롭고 오류가 발생하는지를 설명합니다. 개발자가 해결해야하는 몇 가지 미묘한 디자인 요소가 있습니다. 일반적으로 우리가 조사한 다른 구현은 정확성, 효율성, 공정성 및 이식성에 따라 다릅니다. 이러한 모든 특성을 최적으로 제공하는 솔루션은 없습니다.

공정함이 가장 중요한 경우 섹션 3.4의 SignalObjectsAndWait 솔루션이 좋은 접근 방법입니다. 그러나이 방법은 다른 솔루션만큼 효율적이지 않으며 휴대용이 아닙니다. 따라서 효율성 또는 이식성이 공정성보다 더 중요한 경우 섹션 3.2에 설명 된 SetEvent 접근 방식이 더 적합 할 수 있습니다. 당연히, 가장 쉬운 솔루션은 Microsoft가 Win32 API에 조건 변수를 제공하는 것입니다.

: Vista에서 시작

참고, 윈도우 네이티브 API를 사용하여 상태 변수를 지원합니다