std::atomic
이 사용 가능할 때까지 변수를 원자 적으로 증분하는 다중 플랫폼 (windows &) 방법은 무엇입니까?다중 플랫폼 원자 증분
현재 boost::detail::atomic_count
을 사용하고 있지만 boost::detail
네임 스페이스에 있으며 안전하게 사용해도되는지 잘 모르겠습니다.
std::atomic
이 사용 가능할 때까지 변수를 원자 적으로 증분하는 다중 플랫폼 (windows &) 방법은 무엇입니까?다중 플랫폼 원자 증분
현재 boost::detail::atomic_count
을 사용하고 있지만 boost::detail
네임 스페이스에 있으며 안전하게 사용해도되는지 잘 모르겠습니다.
멀티 플랫폼이지만 컴파일러 특정 방법은 GCC의 __sync_fetch_and_add
을 사용하는 것입니다.
또는 조건부 컴파일의 비트와 함께 같은 함수 자신을 정의
#ifdef __GNUC__
#define atomic_inc(ptr) __sync_fetch_and_add ((ptr), 1)
#elif defined (_WIN32)
#define atomic_inc(ptr) InterlockedIncrement ((ptr))
#else
#error "Need some more porting work here"
#endif
__sync_fetch_and_add 및 MSVC InterlockedIncrement는 반환 유형에서 동일하지 않습니다. __sync_fetch_and_add는 ptr의 * 이전 값을 반환하고 InterlockedIncrement는 증가 된 ptr의 결과 값을 반환합니다. 사용하고자하는 것은 "__sync_add_and_fetch"가 동일하거나 호환 될 수 있다는 것입니다. –
또한 InterlockedIncrement는 32 비트 값 전용입니다. – rubenvb
당신이 현재 언더 리뷰 [Boost.Atomic] 봤어 (http://www.chaoticmind.net/~ hcb/projects/boost.atomic/doc/index.html) 라이브러리? – ildjarn
'std :: atomic'이 이미 사용 가능합니다. 아니? –
MSVC와 GCC는 모두 std :: atomic 지원을 갖습니다. http://www.stdthread.co.uk – Eloff