2014-09-16 2 views
0

lock free 부스트 도큐멘트 부분을 읽으면서, "고정 크기의 어레이를 사용하여 내부 노드를 저장합니다"라는 메시지가 표시되어 ABA 발행물이 32 비트 시스템에 저장되지 않도록하십시오. 어떤 부분은이 부분이 소스 코드에서 끝나는 힌트를 줄 수 있습니까? 부스트 프로젝트 전체가 나에게 너무 커. 감사합니다.어떻게 부스트가 32 비트 시스템에서 ABA 문제를 피할 수 있습니까?

답변

2

소스에 대한 포인터가 없지만 설명서가 나에게 충분히 명확하게 보입니다.

태그와 함께 포인터를 사용하는 대신 큐의 크기를 미리 알면 태그와 함께 index-with 태그를 사용할 수 있습니다. 이렇게하면 포인터의 전체 너비를 필요로하지 않고 (이론적으로 32 비트 가상 주소 공간의 어느 위치 에나 노드를 할당 할 수 있기 때문에) 배열에 인덱스 값 (0 기준)을위한 비트 만 필요합니다 앞쪽에 할당 된 노드 수

최대 65536 개의 요소가있는 큐를 원한다고 가정하십시오. 포인터를 사용하면 요소를 처리하기 위해 32 비트 (또는 할당이 특정 방식으로 정렬되는 경우 몇 가지 방법이 필요합니다)가 필요합니다. 하나의 32 비트 단어에 맞지 않는 태그에 대해 더 많이 설명합니다. 그러나 인덱스를 사용하면 0에서 65535 사이의 모든 값을 (잘 색인하고) 주소 지정하는 데 16 비트 만 있으면됩니다. 32 비트 와이드 머신 워드의 나머지는 태그 값을 저장하는 데 사용할 수 있으며 32 비트 너비 만 저장할 수 있습니다 CAS 명령은 하드웨어 수준에서 필요합니다.