게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
lockfree stamp queue 구현...
게시물ID : programmer_3434짧은주소 복사하기
작성자 : 버닝아웃
추천 : 0
조회수 : 509회
댓글수 : 1개
등록시간 : 2014/05/22 03:48:44
64비트 운영체제에서  큐를 lockfree로 구현하려 합니다. 

stamp를 이용해서 말이죠. 

인큐에서 카스를 시키는데 인큐가 성공하면 스탬프가 증가하는게 맞잖아요?!

bool CAS( STAMP_PTR volatile * mem, NODE *old_ptr, NODE *new_ptr, int old_stamp, int new_stamp)
{
long long old_v, new_v;
old_v = (reinterpret_cast<int>(old_ptr) << 32) + old_stamp;
new_v = (reinterpret_cast<int>(new_ptr) << 32) + new_stamp;
long long temp = InterlockedCompareExchange64(
reinterpret_cast< long long volatile * >(mem), new_v, old_v);
return temp == old_v;
}

이런식으로 카스를 구현했는데 mem 이 스템프가 증가해서 다음 노드도 찍어야 하는데 일단 증가가 안되네요 ㅠㅠ 
문제가 뭔지 모르겠는데 일단 이 부분만 올립니다. 다른 부분도 필요하시다면 올려드리겠습니다.
스템프방식부터 이해를 못하고 있는것 같기도...ㅠㅠ 도와주세요~!
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호