Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.programming.threads > #1243

Re: Distributed Reader-Writer Mutex 1.1

From "aminer" <aminer@toto.com>
Newsgroups comp.programming.threads, comp.programming
Subject Re: Distributed Reader-Writer Mutex 1.1
Date 2012-11-29 10:59 -0600
Organization A noiseless patient Spider
Message-ID <k980mp$r1l$1@dont-email.me> (permalink)
References <k95v4d$brt$1@dont-email.me>

Cross-posted to 2 groups.

Show all headers | View raw


Hello,

I have updated Distributed Reader-Writer Mutex to version 1.13,
i have saved and restored the ebx/rbx register in the 
GetCurrentProcessorNumber inline assembler function, and now
it's working correctly.

You can download it from:

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



Thank you,
Amine Moulay Ramdane.


"aminer" <aminer@toto.com> wrote in message 
news:k95v4d$brt$1@dont-email.me...
> Hello,
>
>
> Distributed Reader-Writer Mutex was updated to version 1.1 , in this new 
> version it works both across processes and threads.
>
>
> Description:
>
> Distributed Reader-Writer Mutex, based on the Dmitry Vyukov C++ 
> Distributed Reader-Writer Mutex , that works across processe and threads, 
> I have included the following Reader-Writer Mutexes inside this 
> Distributed Reader-Writer mutex:
>
> TMREW a light weight MREW lock (multiple-readers-exclusive-writer lock) 
> that is very fast and that works across processes and threads and 
> TMultiReadExclusiveWrite from JCL and now both of them can scale better, 
> and i have modified the Dmitry Vyukov Distributed Reader-Writer Mutex, in 
> the first version i have not used GetCurrentProcessor() but i have used 
> GetCurrentThreadID(), 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 inside 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.
>
> 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 is based on the following C++ Distributed Reader-Writer Mutex by 
> Dmitry Vyukov, read more here:
>
> http://www.1024cores.net/home/lock-free-algorithms/reader-writer-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(100);
> You have four methods:
> procedure wlock; // same as EnterWriteLock of TOmniMREW
> procedure wunlock; // same as ExitWriteLock
> procedure rlock; // same as EnterReadLock
> procedure runlock; // same as ExitReadLock
>
> and you have to pass the number of 
> MREWs(multiple-readers-exclusive-writer) to the constructor like this:
> drw:=TDRWLOCK.create(200); // here we are creating 200 MEWs
> 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 
> 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() .
>
> In the previous versions i have aligned the array elements on cache line 
> bounderies like have done Dmitry Vyukov, and when i have tested the second 
> version it didn't work correctly , 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 and this time it 
> has worked perfectly and now the second version is scaling perfectly..
>
> 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 5,6,7 use -DDelphi
> For Delphi 2005,2006,2007,2009,2010+ use the switch -DDELPHI2005+
> 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.1 from:
>
> http://pages.videotron.com/aminer/
>
>
>
>
> Thank you,
> Amine Mouklay Ramdane.
>
> 

Back to comp.programming.threads | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Distributed Reader-Writer Mutex 1.1 "aminer" <aminer@toto.com> - 2012-11-28 16:21 -0600
  Re: Distributed Reader-Writer Mutex 1.1 "aminer" <aminer@toto.com> - 2012-11-28 20:47 -0600
    Re: Distributed Reader-Writer Mutex 1.1 Anonymous <nobody@remailer.paranoici.org> - 2012-11-29 15:55 +0000
  Re: Distributed Reader-Writer Mutex 1.1 "aminer" <aminer@toto.com> - 2012-11-28 21:08 -0600
  Re: Distributed Reader-Writer Mutex 1.1 "aminer" <aminer@toto.com> - 2012-11-29 10:59 -0600
    Re: Distributed Reader-Writer Mutex 1.1 Wilfried März <Wilfried.Maerz@gmx.at> - 2012-11-29 20:25 +0100

csiph-web