다음을 통해 공유


의미 체계 획득 및 해제

다른 프로세서가 후속 작업이 적용되기 전에 항상 해당 효과를 볼 수 있는 경우 연산은 의미 체계를 획득 합니다. 다른 프로세서가 작업 자체의 효과 전에 이전 작업의 모든 효과를 볼 경우 작업에 릴리스 의미 체계 가 있습니다.

다음 코드 예제를 생각해보세요.

 a++;
 b++;
 c++;

다른 프로세서의 관점에서 이전 작업은 순서에 따라 발생할 수 있습니다. 예를 들어, 다른 프로세서는 a의 증분 전에 b의 증분을 볼 수 있습니다.

InterlockedXxx 루틴이 수행하는 것과 같은 원자성 작업에는 기본적으로 획득 및 해제 의미론이 포함되어 있습니다. 그러나 Itanium 기반 프로세서는 획득 의미 체계 또는 릴리스 의미 체계만 가진 작업을 둘 다 가진 작업보다 더 빠르게 실행합니다. 따라서 시스템은 일부 InterlockedXxx 루틴의 InterlockedXxxAcquireInterlockedXxxRelease 버전을 제공합니다.

예를 들어 InterlockedIncrementAcquire 루틴은 획득 의미 체계를 사용하여 변수를 증가합니다. 위의 코드 예제를 다음과 같이 다시 작성하는 경우:

 InterlockedIncrementAcquire(&a);
 b++;
 c++;

다른 프로세서는 항상 a의 증분을 bc의 증분보다 먼저 보게 됩니다.

마찬가지로 InterlockedIncrementRelease 루틴은 릴리스 의미 체계를 사용하여 변수를 증가합니다. 코드 예제를 다시 작성하는 경우 다음과 같이 다시 한 번 수행합니다.

 a++;
 b++;
 InterlockedIncrementRelease(&c);

다른 프로세서는 항상 c 증분 이전에 ab의 증분을 볼 수 있습니다.

프로세서가 의미 체계만 획득하거나 릴리스하는 명령만 제공하지 않는 경우 시스템은 두 가지 유형의 의미 체계를 모두 제공하는 해당 루틴을 사용합니다. 예를 들어 x86 프로세서에서 InterlockedIncrementAcquireInterlockedIncrementReleaseInterlockedIncrement와 동일합니다.

다음 표에서는 획득 전용 및 릴리스 전용 변형이 있는 루틴을 나열합니다.

연동Xxx 루틴 Acquire-Semantics-Only 버전 릴리스 -Semantics-Only 버전

InterlockedIncrement

InterlockedIncrementAcquire

InterlockedIncrementRelease

인터록드디크리먼트

InterlockedDecrementAcquire

interlockedDecrementRelease

InterlockedCompareExchange

인터록드커페어익스체인지어퀴어

InterlockedCompareExchangeRelease