2011-04-06 2 views

답변

0

당신이 할 수 있도록 당신은 또한, 일부 특정 데이터 유형에 대한 원자 매크로를 확인하는 것이 좋습니다 :

#if defined(_GLIBCXX_ATOMIC_BUILTINS_4) && !defined(_GLIBCXX_ATOMIC_BUILTINS) 
#define _GLIBCXX_ATOMIC_BUILTINS 
#endif 

또는

#if defined(_GLIBCXX_ATOMIC_BUILTINS) || defined(_GLIBCXX_ATOMIC_BUILTINS_4) 

매크로

은 다음과 같습니다

/* Define if builtin atomic operations for bool are supported on this host. */ 
#undef _GLIBCXX_ATOMIC_BUILTINS_1 

/* Define if builtin atomic operations for short are supported on this host. */ 
#undef _GLIBCXX_ATOMIC_BUILTINS_2 

/* Define if builtin atomic operations for int are supported on this host. */ 
#undef _GLIBCXX_ATOMIC_BUILTINS_4 

/* Define if builtin atomic operations for long long are supported on this 
    host. */ 
#undef _GLIBCXX_ATOMIC_BUILTINS_8 
+0

작동하지 않는 것 같습니다. -dM 출력을 살펴 보았고 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1, _2, _4 & _8을 정의했습니다. – Matt

+0

libstdC++가 i386 용으로 컴파일 된 경우 _GLIBCXX_ATOMIC_BUILTINS_N이'bits/C++ config.h'에 정의되어 있지 않습니다 (설치시 설정 됨). 그것은 -march = i686 (또는> = 486)으로 컴파일해야 할 필요가있었습니다. _GLIBCXX_ATOMIC_BUILTINS_N과 _GCC_HAVE_SYNC_COMPARE_AND_SWAP_N이 모두 정의되지 않은 경우에도 물론 원자 연산을 지원할 수 있습니다. 타겟이'__sync_val_compare_and_swap'을 지원하는지 확인하는 가장 좋은 방법은 [autoconf] (http://www.gnu.org/software/autoconf/) 또는 [atomic_types.h] (http : //)에있는 조건부 전처리기를 사용하는 것입니다. ftp.iptel.org/pub/sems/doc/current/atomic__types_8h_source.html) – jspcal

관련 문제