std :: atomic을 통해 휘발성 한정자가 사용되는 이유는 무엇입니까?
내가 Herb Sutter 와 다른 사람들 로부터 읽은 내용에서 당신은 volatile
동시 프로그래밍이 적어도 C / C ++에 관한 한 완전히 직교적인 개념 이라고 생각할 것입니다 .
그러나 GCC 구현에서는의 모든 std::atomic
멤버 함수에 volatile
한정자가 있습니다. 동일은 앤서니 윌리엄스의의 사실이다 구현 의 std::atomic
.
그래서 거래는 무엇입니까, 내 atomic<>
변수가 필요 volatile
합니까?
volatile
한정자가 전체적으로 사용되는 이유는 무엇 std::atomic
입니까?
따라서 휘발성 객체도 원 자성이 될 수 있습니다. 참조 여기 :
관련 견적은
함수와 연산은 휘발성 객체와 함께 작동하도록 정의되어 있으므로 휘발성이어야하는 변수도 원자적일 수 있습니다. 그러나 휘발성 한정자는 원자성에 필요하지 않습니다.
내 atomic<>
변수가 필요 volatile
합니까?
아니요, 원자 객체는 휘발성 일 필요가 없습니다.
다른 사람들이 올바로 작성한 내용을 요약하면
C / C ++ volatile
는 하드웨어 액세스 및 인터럽트 용입니다. C ++ 11 atomic<>
은 스레드 간 통신용입니다 (예 : 잠금없는 코드). 이 두 가지 개념 / 용도는 직교하지만 요구 사항이 겹치기 때문에 사람들이 종종 두 가지를 혼동합니다.
그 이유 atomic<>
는 가능성이 원칙적으로 객체 모두 할 수 있기 때문에 휘발성 자격을 갖춘 기능을 가지고, 그것은 CONST 자격을 갖춘 기능을 가지고 같은 이유 atomic<>
도 const
및 / 또는 volatile
.
물론 내 기사에서 지적했듯이 혼란의 또 다른 원인은 C / C ++ volatile
가 C # / Java와 동일하지 않다는 것입니다 volatile
(후자는 기본적으로 C ++ 11과 동일합니다 atomic<>
).
const로서 volatile은 전 이적입니다. 메서드를 volatile
다음 과 같이 선언하면 그에 대한 비 휘발성 메서드 나 해당 멤버 속성을 호출 할 수 없습니다. 가짐으로써 std::atomic
방법을 volatile
당신은에서 호출 할 수 volatile
포함 클래스의 멤버 메소드 std::atomic
변수를.
나는 좋은 하루를 보내고 있지 않습니다 ... 너무 헷갈리네요 ... 아마도 약간의 예가 도움이 될 것입니다 :
struct element {
void op1() volatile;
void op2();
};
struct container {
void foo() volatile {
e.op1(); // correct
//e.op2(); // compile time error
}
element e;
};
참고 URL : https://stackoverflow.com/questions/2479067/why-is-the-volatile-qualifier-used-through-out-stdatomic
'developer tip' 카테고리의 다른 글
MYSQL : 두 번째 테이블에 하나의 추가 열이있는 mysql의 한 테이블에서 다른 테이블로 전체 행을 복사하는 방법은 무엇입니까? (0) | 2020.10.29 |
---|---|
Linux 콘솔에서 시각적 차이가 있습니까? (0) | 2020.10.29 |
wget을 사용하여를 확인할 수 있지만 다운로드 할 수는 없습니다. (0) | 2020.10.29 |
파이썬에서 객체의 현재 참조 수를 얻는 방법이 있습니까? (0) | 2020.10.29 |
지금까지 본 확장 방법의 가장 좋은 또는 가장 흥미로운 사용은 무엇입니까? (0) | 2020.10.29 |