2011-10-07 2 views
2

에 대한 __sync_val_compare_and_swap 기능의 대안 :나는 다음과 같은 방법을 내 프로젝트에있는 오래된 GCC 컴파일러

long compare(long* avar, long comp, long exc) 
{ 
    return __sync_val_compare_and_swap(avar, comp, exc); 
} 

하지만 난 버전의 GCC를 사용하여 내 프로젝트 (예를 들어 이전 버전, 3.4.3)을 컴파일하려면 어떤 지원하지 않습니다 AtomicBuiltins 솔루션의 대안 경로는 무엇입니까 우리의 문제는 무엇입니까? 어떤 종류의 대체 함수 (__sync_val_compare_and_swap의 대안) 또는 __sync_val_compare_and_swap 대신 사용할 수있는 함수 블록입니까?

답변

2

내가 볼 수있는 유일한 대안은 어셈블러를 통해 이것을 구현해야한다는 것입니다. 나는 asm gcc의 확장이 석기 시대에 앞서 있다고 생각한다. 그래서 당신이 encouter 할 수있는 컴파일러는 이것을 지원할 것이다.

이 특정 기능을 구현하는 것은 그렇게 어렵지 않으며 쉽게 참조 할 수 있습니다. 하지만 각 아키텍처에 대해 서로 다른 구현을 제공해야합니다.

+2

간단하고 정중 한 접근법은 알고 있고 공식적으로 지원하는 아치를 위해 인라인 asm을 사용하고 다른 모든 gcc 확장자로 폴백 (fallback)하는 것입니다. 그렇게하면 누구든지 충분히 현대적인 컴파일러를 사용하고자한다면 시스템을 아무리 모호하게 할지라도 프로그램을 사용할 수 있습니다. –