2014-02-11 7 views
8

내가 중요하지 않은 이유와 비 원자 연산을 사용하여 동작을 테스트하려는 경우에 사용할 수없는 상황을 생각해 볼 수 있습니다.원자 적 조작을 사용하지 않을 때?

다른 이유는 무엇입니까? 특히 테스트에서 원자 단위로 증가하지 않기 때문에 약간의 경쟁 조건이있는 프로젝트를 작업 중입니다. 궁금한데, 왜 그 기능이 이미 존재할 때 나는 항상 원자 단위로 증가하지 않을까?

감사합니다.

+0

질문을 던지십시오. 작업자가 새로운 * threads *가 아닌 새로운 * 프로세스 *로 시작되도록 프로그램을 작성하면 프로세스가 메모리를 공유하지 않기 때문에 공유 메모리에 대한 원자 적 업데이트에 대해 걱정할 필요가 없습니다. 따라서 "항상 원자 연산을 사용하지 않는 이유는 무엇입니까?"라는 질문 대신 ** 스레드 대신 스레드를 항상 사용하지 않는 이유 **를 물어 보는 것이 현명하지 않습니까? –

+0

흥미로운 점은, 내가 atomics를 사용하지 않는 이유는 메모리/속도와 같은 리소스가 제한되어있는 것과 같은 문제라고 생각합니다. –

답변

6

원자 단위가 더 느리기 때문에. 그것들은 호출 쓰레드를 느리게 만들며, 다른 쓰레드도 느리게 만들 수 있습니다. 또한 컴파일러가 달리 수행 할 특정 순서 재 지정 최적화를 수행하지 못하게 할 수 있습니다.

+1

또한, 물론 ... 모든 곳에서 원자학을 사용하면 스레드 안전성을 향상시키기 위해 실제로 아무 것도하지 않습니다. 따라서 올바른 분석을 건너 뛰면 교착 상태가 발생할 수 있습니다. –

+0

@JamesKanze, 원자 단위가 반드시 잠금 기반이 될 필요는 없습니다. – Leeor

+0

@Leeor 사실이지만, 잠금을 사용하지 않을 수도 있습니다. 잠금을 사용하는 다른 방법이 있습니다 (또는 모든 활성 스레드를 busyloops에 넣을 수 있습니다. 더 도움이되는). 프로그램 정확성은 *** 글로벌 *** 속성입니다. –

1

원자 작업은 잠재적으로 가능성이 높으며 가능성이 높습니다. 스레드 간의 동기화가 필요하지 않은 경우, 예를 들어 공유되지 않은 로컬을 업데이트하는 경우, atomiticy는 불필요한 오버 헤드를 추가하므로 피해야합니다.

관련 문제