3 ms·
From the document you linked: int lfstack_pop(_Atomic lfstack_t \*lfstack) { lfstack_t next; lfstack_t orig = atomic_load(lfstack); do
by pebal 4y ago
From the document you linked:
int lfstack_pop(_Atomic lfstack_t \*lfstack)
{
lfstack_t next;
lfstack_t orig = atomic_load(lfstack);
do
{
if (orig.head == NULL) // undefined behavior !!!
{
return -1;
}
next.head = orig.head->next;
} while (!atomic_compare_exchange_weak(lfstack,&orig,next));
free(orig.head);
return 0;
}
If the first thread is preempted before the if(...) is executed, and then the second thread executes the entire method, then you will use data after freeing when the first thread resumes. Consider why the boost container doesn't free memory.
- CyberDildonics 4y agoI asked you about the specific of what you were trying to point out in your own link to the 15 year old message board and instead of answering that you moved on to something else. Can you focus and nail down one claim with specifics before moving on to something else?
- pebal 4y agoA similar example is posted there, just read it. It's best to read about the problems of concurrent containers, because you clearly don't understand the topic.
- CyberDildonics 4y agoIf it's so similar, then copy and paste it or at least link directly to it. If you understand these things so well, why can't you explain them? Everything you are doing is the classic playbook of someone who can't really back up what they're saying. There is the 'I already gave evidence' phase and at some point the 'I would totally give real evidence, but I don't like the way you're asking' phase. I've already done all the things you claim are impossible. That's how I know what you're saying is nonsense. Avoiding a double free on a pointer can always be done with atomic reference counting so that only one thread claims ownership. That's the whole story. You haven't given a shred of evidence to explain what garbage collection enables something that was previously impossible. It is obvious that if you had something you could say that directly applies to what you claimed before (some algorithms can't be done without garbage collection), that you would have already said it a long time ago.