Sujet : Re: smrproxy v2
De : chris.m.thomasson.1 (at) *nospam* gmail.com (Chris M. Thomasson)
Groupes : comp.lang.c++Date : 02. Nov 2024, 21:50:51
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vg63bc$3ukov$6@dont-email.me>
References : 1
User-Agent : Mozilla Thunderbird
On 10/17/2024 5:10 AM, jseigh wrote:
I replaced the hazard pointer logic in smrproxy. It's now wait-free
instead of mostly wait-free. The reader lock logic after loading
the address of the reader lock object into a register is now 2
instructions a load followed by a store. The unlock is same
as before, just a store.
It's way faster now.
It's on the feature/003 branch as a POC. I'm working on porting
it to c++ and don't want to waste any more time on c version.
No idea of it's a new algorithm. I suspect that since I use
the term epoch that it will be claimed that it's ebr, epoch
based reclamation, and that all ebr algorithms are equivalent.
Though I suppose you could argue it's qsbr if I point out what
the quiescent states are.
Joe Seigh
Another crude experiment I was testing out back in the day. Heart beat for per threads, wrt a version that does not use asymmetric membars to test against:
per_thread
{
word cur = 0;
void beat()
{
word global = g_version;
if (cur == global) return;
store_seq_cst(&cur, global);
}
}
Well, this case requires worker threads to beat every now and then when they are outside of critical sections. Just a test case against my asymmetric versions. The _single_ poll thread would increment the g_version then check for threads that were equal to the new version. This was a quiescent period when all threads went through it.
Of course the asymmetric version beat it, but it was fun to test against anyway.