자물쇠가없는 데이터 구조로 작업 중이며 CAS 포인터를 사용하려고합니다.__sync_bool_compare_and_swap 컴파일러 플래그 및 포함
비교 및 스왑을 사용할 때 컴파일러에 어떤 플래그를 전달해야합니까? http://locklessinc.com/ 메모리 할당 자에 대한 라이센스를 받았습니다. netbeans도 사용 중입니다.
현재 유일한 플래그는 링커 -march = native -lllalloc입니다.
그러나 프로그램을 실행할 때 이상한 메모리 문제가 발생합니다. 나는 깃발이나 두 개가 누락되었을 수 있다고 생각합니다 ... 또한 netbeans는 "식별자 __sync_bool_compare_and_swap을 (를) 확인할 수 없습니다"라고 말했지만 여전히 컴파일합니다.
누구든지 아이디어가 있습니까?
데이터 구조 :
struct Ambigous
{
short type;
union{
struct{
bool inCleanup;
KEY key;
VALUE value;
};
Ambigous* volatile list[MAIN_SIZE];//CHANGED ordering, still have netbeans error
};
};
비교 내 스왑 코드 I 메모리 할당 방법
bool res= __sync_bool_compare_and_swap(&(local->list[pos]), current_node, new_node);
:
Ambigous *temp_spine = (Ambigous *) calloc(1,sizeof (Ambigous));
빠른 질문입니다. 왜 '목록'은 '휘발성'으로 선언됩니까? 생성 된 어셈블러를 살펴 보았습니까? –
아, 그게 내 문제일지도 몰라 목록이 휘발성이어서는 안되며, 목록 안의 각 요소는 휘발성이어야합니다. –
아니요. 왜 '휘발성'입니까? 어떤 서비스를 제공합니까? –