Building a Fast Lock-Free Queue in Modern C++ from Scratch
blog.jaysmito.dev
Building a Fast Lock-Free Queue in Modern C++ from Scratch
1–10 of 42 posts
Re: Building a Fast Lock-Free Queue in Modern C++ from Scratch
#2Re: Building a Fast Lock-Free Queue in Modern C++ from Scratch
#3Re: Building a Fast Lock-Free Queue in Modern C++ from Scratch
#4The last thing you want is all of the threads failing to cmpxchg (spuriously or otherwise ) spinning on a shared cacheline
Real world alternatives show atomic xchg only solutions scale to hundreds of threads.
Re: Building a Fast Lock-Free Queue in Modern C++ from Scratch
#5Once you use atomic cmpxchg you've lost a great deal of scalability because it implies a retry loop (internal or by the user) The last thing you want is all of the threads failing to cmpxchg (spuriously or otherwise ) spinning on a shared cacheline Real world alternatives show atomic xchg only solutions scale to hundreds of threads.
But notably only with certain workloads
Re: Building a Fast Lock-Free Queue in Modern C++ from Scratch
#6Once you use atomic cmpxchg you've lost a great deal of scalability because it implies a retry loop (internal or by the user) The last thing you want is all of the threads failing to cmpxchg (spuriously or otherwise ) spinning on a shared cacheline Real world alternatives show atomic xchg only solutions scale to hundreds of threads.
> Real world alternatives show atomic xchg only solutions scale to hundreds of threads But notably only with certain workloads
Re: Building a Fast Lock-Free Queue in Modern C++ from Scratch
#7Re: Building a Fast Lock-Free Queue in Modern C++ from Scratch
#8Nice article. There a few issues with your code however from a cursory glance; your dtor seems to allow for spurious/double frees due to custom deleter support (you wanna check up on that), you also seem to use seq_cst far too much even if not needed (you want to avoid them is queues as much as possible), lastly class FastQueueNodeSlot.. isn't aligned (plus 64b alignment is only a thing for amd64 cpus, apple silicon…
Re: Building a Fast Lock-Free Queue in Modern C++ from Scratch
#9Nice article. There a few issues with your code however from a cursory glance; your dtor seems to allow for spurious/double frees due to custom deleter support (you wanna check up on that), you also seem to use seq_cst far too much even if not needed (you want to avoid them is queues as much as possible), lastly class FastQueueNodeSlot.. isn't aligned (plus 64b alignment is only a thing for amd64 cpus, apple silicon…
a C++ experienced programmer, I spoke recently to, told me that using new and delete is basically prohibited nowadays in C++ in favour of std::make_unique, std::make_shared etc.
Re: Building a Fast Lock-Free Queue in Modern C++ from Scratch
#10Nice article. There a few issues with your code however from a cursory glance; your dtor seems to allow for spurious/double frees due to custom deleter support (you wanna check up on that), you also seem to use seq_cst far too much even if not needed (you want to avoid them is queues as much as possible), lastly class FastQueueNodeSlot.. isn't aligned (plus 64b alignment is only a thing for amd64 cpus, apple silicon…
a C++ experienced programmer, I spoke recently to, told me that using new and delete is basically prohibited nowadays in C++ in favour of std::make_unique, std::make_shared etc.