영어로 읽기

다음을 통해 공유


의미 체계 획득 및 해제

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

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

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

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

InterlockedXxx 루틴이 수행하는 것과 같은 원자성 작업에는 기본적으로 의미 체계를 획득하고 해제합니다. 그러나 Itanium 기반 프로세서는 의미 체계를 획득하거나 둘 다 가진 프로세서보다 더 빠르게 릴리스하는 작업을 실행합니다. 따라서 시스템은 일부 인터록된 Xxx루틴의 Interlocked Xxx AcquireInterlockedXxx릴리스 버전을 제공합니다.

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

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

다른 프로세서는 항상 및 의 증가 a 전에 의 증분을 볼 수 있습니다b.c

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

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

다른 프로세서는 항상 증분 전 및 b 의 증 a 분을 c볼 수 있습니다.

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

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