>  기사  >  백엔드 개발  >  std::atomic<>의 원자 객체란 무엇입니까?

std::atomic<>의 원자 객체란 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-10 16:33:02510검색

What is an Atomic Object in  std::atomic<>? 
? " />

std::atomic<>의 Atomic Object란 무엇입니까?

std::atomic<> 템플릿은 동시에 생성할 수 있는 유형을 제공합니다. 정의되지 않은 동작을 발생시키지 않고 여러 스레드에 의해 작동됩니다.

std::atomic<>

std::atomic<>의 각 인스턴스화는 원자성을 나타냅니다. 일반 C 객체와 달리 원자 객체는 데이터에 대한 독점적인 액세스를 보장하여 데이터 경합을 방지합니다.

원자 연산

원자적 개체에 대해 수행되는 작업은 본질적으로 원자적입니다. 즉,

  • 원자적 개체의 상태에 대한 변경 사항은 모든 스레드에 표시됩니다.
  • 원자적 개체에 대한 액세스는 다음과 같습니다. 스레드 간 동기화를 설정하고 비원자 메모리 액세스 순서를 지정합니다.

메모리 순서 및 std::atomic<>

std::atomic<> ; 동기화 및 메모리 순서에 대한 정확한 제어를 제공합니다.

  • std::memory_order_relaxed: 동기화 또는 순서 보장이 없습니다.
  • std::memory_order_release: 동일한 원자 변수를 획득하는 다른 스레드에 쓰기가 표시되는지 확인합니다.
  • std::memory_order_acquire: 다른 스레드의 동일한 원자 변수에 대한 릴리스 작업 후에 로드가 표시되는지 확인합니다.
  • std ::memory_order_seq_cst: 모든 원자 연산 간의 순차적 일관성(전체 전역 순서)을 제공합니다.

예: 산술 연산

개별 산술 연산자는 = 및 원자적 작업을 별도의 로드, 추가 및 저장 작업으로 분해하는 것은 원자적이지 않을 수 있습니다. 예:

a = a + 12;

이 작업에는 다음 단계가 포함됩니다.

  1. a의 값을 로드합니다.
  2. 12를 추가합니다.
  3. 결과를 다시 a에 저장합니다.

2단계와 3단계는 원자적이지 않으므로 다른 스레드가 추가와 저장 사이에 a를 수정할 수 있는 잠재적인 경쟁 조건이 있습니다.

기본 산술 연산의 대안

산술 연산과 관련된 일반적인 사용 사례의 경우 std::atomic<>에 정의된 동등한 오버로드된 연산자를 사용하는 것이 좋습니다. 이러한 연산자는 전체 작업을 원자적으로 수행하여 순차적 일관성을 보장합니다.

원자성 및 메모리 모델에 대한 추가 리소스

  • C 원자 및 메모리 순서
  • 비교: C 11의 원자성을 사용한 무잠금 프로그래밍과 뮤텍스 및 RW 잠금
  • C 11은 표준화된 메모리 모델을 도입했습니다. 그것은 무엇을 의미합니까? 그리고 이것이 C 프로그래밍에 어떤 영향을 미칠까요?
  • C 11의 동시성

위 내용은 std::atomic<>의 원자 객체란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.