2014-09-11 3 views

답변

0

업데이트 할 필요가 없습니다. 이미 업데이트되었습니다. 캐시 가시성 (일반 시스템 및 메모리 유형)은 일반 작업으로 읽은 캐시 라인이 전체 메모리가 일정하고 일관되게 업데이트 된 것처럼 동일한 결과를 보장합니다. 반면에 부분, WC, 스트리밍 또는 기타 필수적이지 않은 일관성있는 액세스를 처리하는 경우 해당 보증을받지 못합니다.

잠긴 작업의 경우 일반적으로 캐시 라인을 통한 내부 잠금을 잡아 하드웨어에서 수행되므로 CAS가 원자 적으로 수행 (읽기 - 수정 - 쓰기)되지만 캐시 일관성과 직교합니다. 수행 한 작업과 상관없이 (단순 저장소에서조차도), 해당 캐시 라인을 "후"(같은 스레드의 프로그램 순서가 더 젊거나 다른 스레드/코어에서 나중에 시간순으로) 치는 모든 읽기 작업은 라인을 보게됩니다 CAS 작업 후. 물론 다른 스레드의 액세스는 해당 작업 전에 줄을 스누핑하고 시스템 메모리 순서 및 코드에 대한 예방 조치에 따라 이전 데이터를 볼 수도 있습니다.

0

예, 해당 캐시 라인에서 전체 메모리 장벽입니다. 따라서 동일한 캐시 라인에서 다른 변수를 업데이트 한 다음 원자 연산을 수행하면 값이 다른 모든 프로세스/스레드에 표시됩니다. 당신이 캐시 라인에 다른 변수에 비 원자 업데이 트를 할 경우, 당신은 여전히 ​​데이터가 다른 프로세서 반대로 그것을 만들 같은 시간에 쓸 것이라는 보장이없는 말했다되고 그건


같은 캐시 라인에있는 다른 변수에 저장합니다. 귀하가 보장 한 것은 해당 데이터가 방금 쓴 데이터인지 또는 다른 스레드가 작성한 데이터인지 여부입니다.

관련 문제