Distributed Reader-Writer Mutex 1.0

Discussion in 'C++' started by aminer, Sep 12, 2012.

  1. aminer

    aminer Guest

    Hello,


    Distributed Reader-Writer Mutex 1.0


    Description:

    Distributed Reader-Writer Mutex, based on the Dmitry Vyukov
    C++ Distributed Reader-Writer Mutex , I have included the following
    Reader-Writer Mutexes inside this Distributed Reader-Writer mutex:
    TOmniMREW a light weight MREW that is very fast and
    TMultiReadExclusiveWrite from JCL and now both of them
    can scale better, and i have modified a little bit the Dmitry Vyukov
    Distributed Reader-Writer Mutex, i have not used GetCurrectProcessor()
    but i have used GetCurrectThreadID() like this:
    nbr := getcurrentthreadid mod proc_count; i have provided you
    with the source code, please take a look at the source code to understand
    better.

    The Object Pascal Distributed Reader-Writer Mutex 1.0
    is based on the following C++ Distributed Reader-Writer Mutex
    by Dmitry Vyukov, read more here:

    http://www.1024cores.net/home/lock-...riter-problem/distributed-reader-writer-mutex

    I have also modified the Dmitry Vyukov's Distributed
    Reader-Writer Mutex to use a variable number of MREWs,
    you can pass the number of MREWs to the constructor like
    this: drw:=TDRWLOCK.create(1000);

    You have four methods:

    procedure wlock; // like the EnterWriteLock of TOmniMREW
    procedure wunlock; // like the ExitWriteLock
    procedure rlock; // like EnterReadLock
    procedure runlock; // like the ExitReadLock

    and you have to pass the number of MREWs(multiple-readers-exclusive-writer)
    to the constructor like this:

    drw:=TDRWLOCK.create(1000); // here we are creating 1000 MEWs


    Language: FPC Pascal v2.2.0+ / Delphi 7+: http://www.freepascal.org/

    Operating Systems: Win and Linux (x86).

    Required FPC switches: -O3 -Sd -dFPC -dWin32 -dFreePascal

    -Sd for delphi mode....

    Required Delphi switches: -DMSWINDOWS -$H+

    For Delphi use -DDelphi

    And inside defines.inc you can use the following defines:

    {$DEFINE CPU32} for 32 bits systems

    {$DEFINE CPU64} for 64 bits systems

    {$DEFINE TOmniMREW} to use Omnithread MREW

    {$DEFINE TMultiReadExclusiveWrite} to use the jcl TMultiReadExclusiveWrite


    You can download Distributed Reader-Writer Mutex 1.0 from:

    http://pages.videotron.com/aminer/


    Thank you,
    Amine Moulay Ramdane.
     
    aminer, Sep 12, 2012
    #1
    1. Advertising

  2. aminer

    aminer Guest

    Hello,

    Distributed Reader-Writer Mutex have been updated to version 1.02.

    I have provided you now with two versions

    In the first version i have not used GetCurrectProcessor() but i have used
    GetCurrectThreadID() , and i have also provided you with a second
    version that scales better, to be able to use the second version please use
    the version2 in defines.inc, i have given you a test.pas example for
    the first version and test1.pas for the second version, but don't forget to
    use version2 inside defines.inc, to use the second version just uncomment
    the version2 inside defines.inc and comment version1.

    I have also done a cache line alignement in TOmniMREW, this has allowed
    Drwlock to scale better.



    You can download Distributed Reader-Writer Mutex version 1.02 from:

    http://pages.videotron.com/aminer/



    Thank you,
    Amine Moulay Ramdane.

    "aminer" <> wrote in message
    news:k2q483$jd7$...
    > Hello,
    >
    >
    > Distributed Reader-Writer Mutex 1.0
    >
    >
    > Description:
    >
    > Distributed Reader-Writer Mutex, based on the Dmitry Vyukov
    > C++ Distributed Reader-Writer Mutex , I have included the following
    > Reader-Writer Mutexes inside this Distributed Reader-Writer mutex:
    > TOmniMREW a light weight MREW that is very fast and
    > TMultiReadExclusiveWrite from JCL and now both of them
    > can scale better, and i have modified a little bit the Dmitry Vyukov
    > Distributed Reader-Writer Mutex, i have not used GetCurrectProcessor()
    > but i have used GetCurrectThreadID() like this:
    > nbr := getcurrentthreadid mod proc_count; i have provided you
    > with the source code, please take a look at the source code to understand
    > better.
    >
    > The Object Pascal Distributed Reader-Writer Mutex 1.0
    > is based on the following C++ Distributed Reader-Writer Mutex
    > by Dmitry Vyukov, read more here:
    >
    > http://www.1024cores.net/home/lock-...riter-problem/distributed-reader-writer-mutex
    >
    > I have also modified the Dmitry Vyukov's Distributed
    > Reader-Writer Mutex to use a variable number of MREWs,
    > you can pass the number of MREWs to the constructor like
    > this: drw:=TDRWLOCK.create(1000);
    >
    > You have four methods:
    >
    > procedure wlock; // like the EnterWriteLock of TOmniMREW
    > procedure wunlock; // like the ExitWriteLock
    > procedure rlock; // like EnterReadLock
    > procedure runlock; // like the ExitReadLock
    >
    > and you have to pass the number of
    > MREWs(multiple-readers-exclusive-writer)
    > to the constructor like this:
    >
    > drw:=TDRWLOCK.create(1000); // here we are creating 1000 MEWs
    >
    >
    > Language: FPC Pascal v2.2.0+ / Delphi 7+: http://www.freepascal.org/
    >
    > Operating Systems: Win and Linux (x86).
    >
    > Required FPC switches: -O3 -Sd -dFPC -dWin32 -dFreePascal
    >
    > -Sd for delphi mode....
    >
    > Required Delphi switches: -DMSWINDOWS -$H+
    >
    > For Delphi use -DDelphi
    >
    > And inside defines.inc you can use the following defines:
    >
    > {$DEFINE CPU32} for 32 bits systems
    >
    > {$DEFINE CPU64} for 64 bits systems
    >
    > {$DEFINE TOmniMREW} to use Omnithread MREW
    >
    > {$DEFINE TMultiReadExclusiveWrite} to use the jcl TMultiReadExclusiveWrite
    >
    >
    > You can download Distributed Reader-Writer Mutex 1.0 from:
    >
    > http://pages.videotron.com/aminer/
    >
    >
    > Thank you,
    > Amine Moulay Ramdane.
    >
    >
     
    aminer, Sep 13, 2012
    #2
    1. Advertising

  3. aminer

    aminer Guest

    Hello,

    Here is some scalability numbers:

    I have used TOmniMREW of the Omnithread library and used
    only EnterReadLock() and ExitReadLock() with four threads on a
    quad cores and TOmniMREW gave a negative scalability of -5.51x

    And when i have used the second version of Distributed Reader-Writer Mutex
    1.02 using only rlock() and runlock() , it gave me 3.94X scalability with
    four threads on four cores. So now it's scaling.


    And about the second version , don't forget to initialize the number that
    you pass to rlock() and runlock() to 0 before
    calling rlock() and runlock() .



    Thank you,
    Amine Moulay Ramdane.



    "aminer" <> wrote in message
    news:k2q483$jd7$...
    > Hello,
    >
    >
    > Distributed Reader-Writer Mutex 1.0
    >
    >
    > Description:
    >
    > Distributed Reader-Writer Mutex, based on the Dmitry Vyukov
    > C++ Distributed Reader-Writer Mutex , I have included the following
    > Reader-Writer Mutexes inside this Distributed Reader-Writer mutex:
    > TOmniMREW a light weight MREW that is very fast and
    > TMultiReadExclusiveWrite from JCL and now both of them
    > can scale better, and i have modified a little bit the Dmitry Vyukov
    > Distributed Reader-Writer Mutex, i have not used GetCurrectProcessor()
    > but i have used GetCurrectThreadID() like this:
    > nbr := getcurrentthreadid mod proc_count; i have provided you
    > with the source code, please take a look at the source code to understand
    > better.
    >
    > The Object Pascal Distributed Reader-Writer Mutex 1.0
    > is based on the following C++ Distributed Reader-Writer Mutex
    > by Dmitry Vyukov, read more here:
    >
    > http://www.1024cores.net/home/lock-...riter-problem/distributed-reader-writer-mutex
    >
    > I have also modified the Dmitry Vyukov's Distributed
    > Reader-Writer Mutex to use a variable number of MREWs,
    > you can pass the number of MREWs to the constructor like
    > this: drw:=TDRWLOCK.create(1000);
    >
    > You have four methods:
    >
    > procedure wlock; // like the EnterWriteLock of TOmniMREW
    > procedure wunlock; // like the ExitWriteLock
    > procedure rlock; // like EnterReadLock
    > procedure runlock; // like the ExitReadLock
    >
    > and you have to pass the number of
    > MREWs(multiple-readers-exclusive-writer)
    > to the constructor like this:
    >
    > drw:=TDRWLOCK.create(1000); // here we are creating 1000 MEWs
    >
    >
    > Language: FPC Pascal v2.2.0+ / Delphi 7+: http://www.freepascal.org/
    >
    > Operating Systems: Win and Linux (x86).
    >
    > Required FPC switches: -O3 -Sd -dFPC -dWin32 -dFreePascal
    >
    > -Sd for delphi mode....
    >
    > Required Delphi switches: -DMSWINDOWS -$H+
    >
    > For Delphi use -DDelphi
    >
    > And inside defines.inc you can use the following defines:
    >
    > {$DEFINE CPU32} for 32 bits systems
    >
    > {$DEFINE CPU64} for 64 bits systems
    >
    > {$DEFINE TOmniMREW} to use Omnithread MREW
    >
    > {$DEFINE TMultiReadExclusiveWrite} to use the jcl TMultiReadExclusiveWrite
    >
    >
    > You can download Distributed Reader-Writer Mutex 1.0 from:
    >
    > http://pages.videotron.com/aminer/
    >
    >
    > Thank you,
    > Amine Moulay Ramdane.
    >
    >
     
    aminer, Sep 13, 2012
    #3
  4. aminer

    aminer Guest

    Hello,

    I don't think i have to align on cache line bounderies the array
    elements, like have done Dmitry Vyukov, i have just added a
    cache line padding inside TOmniMREW of Omnithread, and it
    has worked perfectly.

    You can download Distributed Reader-Writer Mutex 1.03 from:

    http://pages.videotron.com/aminer/


    Thank you,
    Amien Moulay Ramdane.

    "aminer" <> wrote in message
    news:k2q483$jd7$...
    > Hello,
    >
    >
    > Distributed Reader-Writer Mutex 1.0
    >
    >
    > Description:
    >
    > Distributed Reader-Writer Mutex, based on the Dmitry Vyukov
    > C++ Distributed Reader-Writer Mutex , I have included the following
    > Reader-Writer Mutexes inside this Distributed Reader-Writer mutex:
    > TOmniMREW a light weight MREW that is very fast and
    > TMultiReadExclusiveWrite from JCL and now both of them
    > can scale better, and i have modified a little bit the Dmitry Vyukov
    > Distributed Reader-Writer Mutex, i have not used GetCurrectProcessor()
    > but i have used GetCurrectThreadID() like this:
    > nbr := getcurrentthreadid mod proc_count; i have provided you
    > with the source code, please take a look at the source code to understand
    > better.
    >
    > The Object Pascal Distributed Reader-Writer Mutex 1.0
    > is based on the following C++ Distributed Reader-Writer Mutex
    > by Dmitry Vyukov, read more here:
    >
    > http://www.1024cores.net/home/lock-...riter-problem/distributed-reader-writer-mutex
    >
    > I have also modified the Dmitry Vyukov's Distributed
    > Reader-Writer Mutex to use a variable number of MREWs,
    > you can pass the number of MREWs to the constructor like
    > this: drw:=TDRWLOCK.create(1000);
    >
    > You have four methods:
    >
    > procedure wlock; // like the EnterWriteLock of TOmniMREW
    > procedure wunlock; // like the ExitWriteLock
    > procedure rlock; // like EnterReadLock
    > procedure runlock; // like the ExitReadLock
    >
    > and you have to pass the number of
    > MREWs(multiple-readers-exclusive-writer)
    > to the constructor like this:
    >
    > drw:=TDRWLOCK.create(1000); // here we are creating 1000 MEWs
    >
    >
    > Language: FPC Pascal v2.2.0+ / Delphi 7+: http://www.freepascal.org/
    >
    > Operating Systems: Win and Linux (x86).
    >
    > Required FPC switches: -O3 -Sd -dFPC -dWin32 -dFreePascal
    >
    > -Sd for delphi mode....
    >
    > Required Delphi switches: -DMSWINDOWS -$H+
    >
    > For Delphi use -DDelphi
    >
    > And inside defines.inc you can use the following defines:
    >
    > {$DEFINE CPU32} for 32 bits systems
    >
    > {$DEFINE CPU64} for 64 bits systems
    >
    > {$DEFINE TOmniMREW} to use Omnithread MREW
    >
    > {$DEFINE TMultiReadExclusiveWrite} to use the jcl TMultiReadExclusiveWrite
    >
    >
    > You can download Distributed Reader-Writer Mutex 1.0 from:
    >
    > http://pages.videotron.com/aminer/
    >
    >
    > Thank you,
    > Amine Moulay Ramdane.
    >
    >
     
    aminer, Sep 13, 2012
    #4
  5. aminer

    aminer Guest

    Hello,

    In the previous versions i have aligned the array elements on cache line
    bounderies like have done Dmitry Vyukov, and it didn't work correctly
    when i have tested the second version, so i have thought about that and
    after that i have decided to not align the array elements on cache line
    bounderied but just add a cache line padding to TOmniMREW for example
    and this time it has worked perfectly and now the second version is scaling
    perfectly..

    So i have updated Distributed Reader-Writer Mutex to versoin 1.03 ,
    you can download it from:


    http://pages.videotron.com/aminer/


    Thank you,
    Amine Moulay Ramdane.
    "aminer" <> wrote in message
    news:k2q483$jd7$...
    > Hello,
    >
    >
    > Distributed Reader-Writer Mutex 1.0
    >
    >
    > Description:
    >
    > Distributed Reader-Writer Mutex, based on the Dmitry Vyukov
    > C++ Distributed Reader-Writer Mutex , I have included the following
    > Reader-Writer Mutexes inside this Distributed Reader-Writer mutex:
    > TOmniMREW a light weight MREW that is very fast and
    > TMultiReadExclusiveWrite from JCL and now both of them
    > can scale better, and i have modified a little bit the Dmitry Vyukov
    > Distributed Reader-Writer Mutex, i have not used GetCurrectProcessor()
    > but i have used GetCurrectThreadID() like this:
    > nbr := getcurrentthreadid mod proc_count; i have provided you
    > with the source code, please take a look at the source code to understand
    > better.
    >
    > The Object Pascal Distributed Reader-Writer Mutex 1.0
    > is based on the following C++ Distributed Reader-Writer Mutex
    > by Dmitry Vyukov, read more here:
    >
    > http://www.1024cores.net/home/lock-...riter-problem/distributed-reader-writer-mutex
    >
    > I have also modified the Dmitry Vyukov's Distributed
    > Reader-Writer Mutex to use a variable number of MREWs,
    > you can pass the number of MREWs to the constructor like
    > this: drw:=TDRWLOCK.create(1000);
    >
    > You have four methods:
    >
    > procedure wlock; // like the EnterWriteLock of TOmniMREW
    > procedure wunlock; // like the ExitWriteLock
    > procedure rlock; // like EnterReadLock
    > procedure runlock; // like the ExitReadLock
    >
    > and you have to pass the number of
    > MREWs(multiple-readers-exclusive-writer)
    > to the constructor like this:
    >
    > drw:=TDRWLOCK.create(1000); // here we are creating 1000 MEWs
    >
    >
    > Language: FPC Pascal v2.2.0+ / Delphi 7+: http://www.freepascal.org/
    >
    > Operating Systems: Win and Linux (x86).
    >
    > Required FPC switches: -O3 -Sd -dFPC -dWin32 -dFreePascal
    >
    > -Sd for delphi mode....
    >
    > Required Delphi switches: -DMSWINDOWS -$H+
    >
    > For Delphi use -DDelphi
    >
    > And inside defines.inc you can use the following defines:
    >
    > {$DEFINE CPU32} for 32 bits systems
    >
    > {$DEFINE CPU64} for 64 bits systems
    >
    > {$DEFINE TOmniMREW} to use Omnithread MREW
    >
    > {$DEFINE TMultiReadExclusiveWrite} to use the jcl TMultiReadExclusiveWrite
    >
    >
    > You can download Distributed Reader-Writer Mutex 1.0 from:
    >
    > http://pages.videotron.com/aminer/
    >
    >
    > Thank you,
    > Amine Moulay Ramdane.
    >
    >
     
    aminer, Sep 13, 2012
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. DaVinci
    Replies:
    1
    Views:
    568
    Piotr Kobzda
    Oct 5, 2006
  2. NaeiKinDus
    Replies:
    1
    Views:
    578
    Jack Klein
    Apr 14, 2007
  3. NaeiKinDus
    Replies:
    3
    Views:
    610
    James Kanze
    Apr 15, 2007
  4. sven
    Replies:
    2
    Views:
    1,949
    Roy Smith
    Dec 4, 2009
  5. Lew
    Replies:
    1
    Views:
    268
    aminer
    Sep 13, 2012
Loading...

Share This Page