2009-08-12 2 views

답변

1

최신 CPU 중 Sparc64만이 이중 와이드 CAS 또는 LL/SC를 구현하지 않습니다. 이와 같이, lock-free 코드를 구현하는 것은 문제가있다. 해결책이 있지만 CAS 또는 LL/SC에 대한 지원으로 인해 다른 플랫폼에 존재하지 않는 문제 (ABA)에 대한 해결책입니다. 또한 Sparce에서는 이러한 제한 때문에 잠금없는 알고리즘을 구현할 수 없습니다.

0

SPARCSPARCv9 구현을 보면 정확히 무엇을하는지 볼 수 있습니다 ... membar_ * 기능 (동일한 파일에서)을 살펴보고 더 강한 보증을 할 수 있는지 알아야합니다 .

+0

일부 어셈블리를 배울 필요가 없기를 바랬습니다. 일반적으로이 낮은 레벨 구조에 매핑되는 C API가 존재하며, 필요한 모든 것은 더블 워드 CAS (Sparc에서는 사용할 수 없음) 또는 LL/SC)입니다. 만약 Sparc CAS *가 * LL/SC이면 괜찮습니다. 그렇다면 실제로 C에서 LL/SC를 사용하는 방법이 필요합니다. 인라인 어셈블러가 아닌 사용할 수있는 함수 호출이 필요합니다. –

+0

어셈블리에 대해 너무 많이 배울 필요가 없습니다. 이들은 C API입니다. http://docs.sun.com/app/docs/doc/816-5168/atomic-cas-3c?a=view 및 여기 http://docs.sun.com/app/에서 문서를 살펴보십시오. docs/doc/816-5168/membar-ops-3c? a = view. 그걸로 너를 갈 수있을거야. 예제가 필요하면 https://svn.boost.org/trac/boost/browser/trunk/boost/smart_ptr/detail/sp_counted_base_solaris.hpp를보십시오. 이는 atomic_cas_32를 사용하지만 동일한 원칙이 적용됩니다. –

+0

문제는 ABA 문제를 해결하기 위해 더블 워드 CAS를 사용하고 있다는 것입니다. Sparc은 더블 워드 CAS를 지원하지 않지만 싱글 워드이지만 ABA 문제를 해결하는 LL/SC를 가지고 있습니다. Sparc CAS라는 싱글 단어가 * CAS라면, 나에게 쓸모가 없습니다. 내부적으로 OTOH가 LL/SC를 사용하여 구현 되었다면 괜찮습니다. 이와 같이, Sun의 docs는 원자 op C API를 사용하지 않았습니다. 부스트는 질문에 대답하지 않았기 때문에 부스트도 아니었다. –

관련 문제