다른 프로세서가 후속 작업이 적용되기 전에 항상 해당 효과를 볼 수 있는 경우 연산은 의미 체계를 획득 합니다. 다른 프로세서가 작업 자체의 효과 전에 이전 작업의 모든 효과를 볼 경우 작업에 릴리스 의미 체계 가 있습니다.
다음 코드 예제를 생각해보세요.
a++;
b++;
c++;
다른 프로세서의 관점에서 이전 작업은 순서에 따라 발생할 수 있습니다. 예를 들어, 다른 프로세서는 a의 증분 전에 b의 증분을 볼 수 있습니다.
InterlockedXxx 루틴이 수행하는 것과 같은 원자성 작업에는 기본적으로 획득 및 해제 의미론이 포함되어 있습니다. 그러나 Itanium 기반 프로세서는 획득 의미 체계 또는 릴리스 의미 체계만 가진 작업을 둘 다 가진 작업보다 더 빠르게 실행합니다. 따라서 시스템은 일부 InterlockedXxx 루틴의 InterlockedXxxAcquire 및 InterlockedXxxRelease 버전을 제공합니다.
예를 들어 InterlockedIncrementAcquire 루틴은 획득 의미 체계를 사용하여 변수를 증가합니다. 위의 코드 예제를 다음과 같이 다시 작성하는 경우:
InterlockedIncrementAcquire(&a);
b++;
c++;
다른 프로세서는 항상 a의 증분을 b 및 c의 증분보다 먼저 보게 됩니다.
마찬가지로 InterlockedIncrementRelease 루틴은 릴리스 의미 체계를 사용하여 변수를 증가합니다. 코드 예제를 다시 작성하는 경우 다음과 같이 다시 한 번 수행합니다.
a++;
b++;
InterlockedIncrementRelease(&c);
다른 프로세서는 항상 c 증분 이전에 a와 b의 증분을 볼 수 있습니다.
프로세서가 의미 체계만 획득하거나 릴리스하는 명령만 제공하지 않는 경우 시스템은 두 가지 유형의 의미 체계를 모두 제공하는 해당 루틴을 사용합니다. 예를 들어 x86 프로세서에서 InterlockedIncrementAcquire 및 InterlockedIncrementRelease 는 InterlockedIncrement와 동일합니다.
다음 표에서는 획득 전용 및 릴리스 전용 변형이 있는 루틴을 나열합니다.
| 연동Xxx 루틴 | Acquire-Semantics-Only 버전 | 릴리스 -Semantics-Only 버전 |
|---|---|---|