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 이 스템프가 증가해서 다음 노드도 찍어야 하는데 일단 증가가 안되네요 ㅠㅠ
문제가 뭔지 모르겠는데 일단 이 부분만 올립니다. 다른 부분도 필요하시다면 올려드리겠습니다.
스템프방식부터 이해를 못하고 있는것 같기도...ㅠㅠ 도와주세요~!