Recent

Author Topic: About lockfree_mpmc -  (Read 2993 times)

aminer

  • Hero Member
  • *****
  • Posts: 956
About lockfree_mpmc -
« on: July 23, 2012, 12:28:32 am »

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 architecture Loads 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 to lasttail.

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].


What do you think ?



Sincerely,
Amine Moulay Ramdane.


aminer

  • Hero Member
  • *****
  • Posts: 956
Re: About lockfree_mpmc -
« Reply #1 on: July 23, 2012, 12:36:31 am »

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.


aminer

  • Hero Member
  • *****
  • Posts: 956
Re: About lockfree_mpmc -
« Reply #2 on: July 23, 2012, 12:52:16 am »

Hello,

I have inserted an mfence between line [1] and [2] in lockfree_mpmc and i 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.


 

TinyPortal © 2005-2018