• My new invention of a Scalable RWLock that works accross processes and

    From Wisdom90@21:1/5 to All on Fri May 22 14:40:33 2020

    My new invention of a Scalable RWLock that works accross processes and
    threads is here, and now it works on both Windows and Linux..

    Please download my source code and take a look at how i am making it
    work across processes by using FNV1a hash on both process ID and thread
    ID, FNV1a has a good dispersion, and FNV1a hash permits also my RWLock
    to be scalable.

    You can download it from my website here:



    This is my invention of a fast, and scalable and starvation-free and
    fair and lightweight Multiple-Readers-Exclusive-Writer Lock called
    LW_RWLockX, it works accross processes and threads.

    The parameters of the constructor are: first parameter is the name of
    the scalable RWLock that to be used accross processes, if the name is
    empty, it will only be used accross threads. The second parameter is the
    size of the array of the readers, so if the size of the array is equal
    to the number of parallel readers, so it will be scalable, but if the
    number of readers are greater than the size of the array , you will
    start to have contention. The third parameter is the size of the array
    of my scalable Lock that is called AMLock, the number of threads can go
    beyond the size of the array of the scalable AMLock, please look at the
    source code of my scalable algorithms to understand.

    I have also used my following implementation of FNV1a hash function to
    make my new variants of RWLocks scalable (since FNV1a is a hash
    algorithm that has good dispersion):

    function FNV1aHash(key:int64): UInt64;

    i: Integer;


    FNV_offset_basis: UInt64 = 14695981039346656037;
    FNV_prime: UInt64 = 1099511628211;


    //FNV-1a hash

    Result := FNV_offset_basis;

    for i := 1 to 8 do
    key1:=(key shr ((i-1)*8)) and $00000000000000ff;
    Result := (Result xor key1) * FNV_prime;


    - Platform: Windows, Unix and Linux on x86

    Required FPC switches: -O3 -Sd

    -Sd for delphi mode....

    Required Delphi switches: -$H+ -DDelphi

    For Delphi XE-XE7 and Delphi tokyo use the -DXE switch

    You can configure it as follows from inside defines.inc file:

    {$DEFINE CPU32} and {$DEFINE Windows32} for 32 bit systems
    {$DEFINE CPU64} and {$DEFINE Windows64} for 64 bit systems

    Thank you,
    Amine Moulay Ramdane.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)