2011-01-24 2 views
2

C/C++ 프로그래밍의 기본 요소는 무엇입니까?부스트/C++ 0x/C++ 1x/컴퓨터 과학의 원자는 무엇입니까?

방금 ​​cppreference.com을 방문했는데 (당연히 제목을 쓰지 않고 끝내기를 기다린다.) 집이 C++ 0x/C++ 1x의 일부를 설명하기 위해 바뀌었다. (C+++라고 부르 자.) 새로운 기능.

내 좀비 프로그래머의 눈에 전혀 보이지 않는 이상한 신기술이었던 <atomic>.

원자 폭탄이나 블랙홀을 프로그래밍하는 것이 아니라고 생각합니다. (하지만 블랙홀과의 연결이 의심 스럽지만이 두 단어가 어떻게 어딘지 몰랐습니다.) 알아 두십시오 :

이 기능의 목적은 무엇입니까? 유형입니까? 함수? 데이터 컨테이너입니까? 스레드와 관련이 있습니까? 파이썬의 "반 중력 반입"과 어떤 관련이 있습니까? 내 말은, 우리는 여기에서 프로그래밍을하고 있으며, 우리는 물리학 자나 시맨틱 학자가 아닌가!

답변

0

멀티 스레딩을위한 것입니다. 동시 스레드가 작업을 혼합하지 않도록합니다. 원자 적 연산은 분할 할 수없는 연산입니다. 시스템의 모든 스레드에서 반쯤 수행 된 작업은 관찰 할 수 없습니다. 완료되었거나 완료되지 않았습니다. 원자 적 연산을 사용하면 스레드간에 데이터 경쟁을 얻을 수 없습니다. 실세계에서 물리학을위한 것이 아니라 도로상의 세마포어 및 기타 교통 신호에 원자를 사용합니다. 자동차는 실로, 도로는 규칙으로, 위치는 데이터가 될 것입니다. 세마포어는 원자가 될 것입니다. 모든 도로에 단 한대의 차가있을 때 세마포어가 필요하지 않습니까?

1

원자는 나눌 수없는 것을 나타냅니다.

원자 표현식은 실제로 한 번의 작업으로 실행되는 표현식입니다. 그러면 a에 결과를 저장하기 위해, 다음에 1을 요약하면, a 값을 얻기 위해 제 필요로하기 때문에 간부 인 예를 들면 a++


은 원자 아니다.

int의 값을 읽는 것이 어 떤 원자가되어야합니다.


원자 - 다움은 공유 메모리 병렬 계산에서 중요하다 (예 : 스레드를 사용하는 경우) : 그것은 당신을 알려주기 때문에 표현은 당신에게 다른 스레드가 무엇을하고 있는지에 상관없이 기대하지있는 결과를 줄 것이다 .

+2

실제로 허브 셔터에 따르면 ++는 'std :: atomic '에 대해 원자 적입니다. – Motti

1

AFAIK 원자 함수를 사용하여 자신의 세마포어 등을 만들 수 있습니다. 원자 이름은 원자에서 온 것이므로 더 작게 나눌 수 없으므로 해당 함수 호출을 "분리되어"운영 체제에서 일시 중지 할 수 없습니다. 이것은 스레드 프로그래밍을위한 것입니다.

관련 문제