3

두 개의 공유 변수 - ab -이 서로 관련되어 있다고 가정 해 보겠습니다. 여러 응용 프로그램이 이러한 공유 변수를 공유하면 해당 변수에 대한 액세스는 원자 적 조작이어야하며, 그렇지 않으면 관계가 중단 될 수 있습니다. 따라서 상호 배제를 보장하기 위해 수정을 잠금 장치로 보호 된 중요한 섹션 아래에 두겠습니다.원자 변수 Vs. 원자 조작

critical_code 
{ 
    P(mutex) 
    a := something 
    b := something 
    V(mutex) 
} 

내 하드웨어/OS/컴파일러에서 원자 변수를 지원한다고 가정 해 보겠습니다. 그런 다음 위의 코드를 다음과 같이 수정했습니다.

code 
{ 
    atomic a := something 
    atomic b := something 
} 

이 코드는 여러 응용 프로그램에서 액세스 할 때 상호 배제를 보장 할 수 있습니까? 감사합니다

,
스 리니 바스 나약는

답변

6

아니, 당신은 여전히 ​​중요한 부분을해야합니다. 각 변수의 업데이트는 원자 적이지만, 한 프로세스가 하나의 변수를 중앙 처리했지만 다른 프로세스는 이미 일관성없는 상태를 읽는 상황에 대해서는 보증하지 않습니다.

원자 변수에 의존하는 것은 각각의 쓰기 및 모든 읽기가 원자적임을 알기에 충분할 때만입니다. 즉, 한 프로세스가 변수를 업데이트 할 때 다른 프로세스가 부분적으로 읽을 수 없다는 것을 안다면 이미 행복합니다. 변경된 변수.

그래서 원자 변수는 변수 세트가 아니라 변수 하나당 원자입니다.