About lockfree_mpmc ...

About lockfree_mpmc ...

imagem de aminer10
Hello all, I think i have discovered a problem with lockfree_mpmc: You will find the source code of lockfree_mpmc at: http://pages.videotron.com/aminer/ So please follow with me: If you take a look at the lockfree_mpmc , here is the source code of the push() method: --- function TLockfree_MPMC.push(tm : tNodeQueue):boolean;
var
lasttail,newtemp:long;
i,j:integer;
begin if getlength >= fsize
then
begin

result:=false;
exit;
end;
result:=true; newTemp:=LockedIncLong(temp); [1] lastTail:=newTemp-1;
[2] setObject(lastTail,tm); repeat if CAS(tail,lasttail,newtemp)
then
begin
exit;

end;
sleep(0);
until false; end; --- As you know in the x86 architectureLoads may be reordered with older
stores to different locations. So in line[2] there is a load of tail and lasttail to the registers of the
processor before calling setobject()and just before on line [1] there is a store
tolasttail. So as you have noticed the processor can then reorder the loads on line [2]
with the older store on line[1] and this will cause a problem, so i thinki have to
insert a load between line [1] and line [2]. What do you think ? Sincerely, Amine Moulay Ramdane.
3 posts / 0 new
Último post
Para obter mais informações sobre otimizações de compiladores, consulte Aviso sobre otimizações.
imagem de aminer10
I wrote: > So as you have noticed the processor can then reorder the loads on
line [2]
> with the older
> store on line [1] and this will cause a
problem, so i think i have to insert
> a load between
> line [1]
and line [2]. Even if i insert a load beween line [1] and [2] this will not work , i have to insert an mfence between line [1] and [2]. What do you think ? Sincerely, Amine Moulay Ramdane.
imagem de aminer10
Hello, I have inserted an mfence between line [1] and [2] in lockfree_mpmc andi
have updated all my programs that uses lockfree_mpmc,and you can download all the source codes of my programs from: http://pages.videotron.com/aminer/ Sincerely, Amine Moulay Ramdane.

Faça login para deixar um comentário.