$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [lock-free] CDS -yet another lock-free library
From: Khiszinsky, Maxim (Maxim.Khiszinsky_at_[hidden])
Date: 2010-03-30 07:25:06
Cory Nelson wrote:
>> Comparing only the tag means that there is global counter incremented atomically. As a result a contention on this global counter may be encountered...
> You should be able to use the exact same algos, but compare only the
> tag. No global counter needed.
I'm not understanding :-(
Formally:
Lets P is the set of all tagged pointer of our application.
To resolve ABA-problem with cmp8xchg16 the following condition must be true:
for each {p, q} from P: p.tag != q.tag
p is struct {
atomic64_t tag ;
void * ptr ;
};
Then, when we change tagged pointer p we must change its tag. How? Simply increment ++p.tag?.. In this case the condition may be violated...
Another question: how the p.tag should be initialized.
It seems, a global counter C appears:
p.tag = atomic_inc( &C ) ;
The global counter keeps the condition as true.
Maybe, my reasoning is not true and you known best solution.
Regards, Max