Intel® Moderncode for Parallel Architectures
Support for developing parallel programming applications on Intel® Architecture.

My C++ Synchronization Objects Library

aminer10
Novice
570 Views

Hello.......

My C++ Synchronization objects library was extended...

My previous invention was a scalable Asymmetric Distributed Reader-Writer Mutex that uses a technic that looks like Seqlock without looping on the reader side like Seqlock, and this has permited the reader side to be costless.

I have finished implementing another implementation of a new algorithm of mine, this one is a scalable Asymmetric Reader-Writer Mutex that is
not distributed, and it uses a technic that looks like Seqlock without looping on the reader side like Seqlock, and this has permited the reader side to be costless, and this one calls the windows FlushProcessWriteBuffers() just one time, but the my asymmetric distributed algorithm calls FlushProcessWriteBuffers() many times.

I have included my scalable Asymmetric Distributed Reader-Writer Mutex and my scalable Asymmetric Reader-Writer Mutex in my C++ Synchronization objects library.

You can download my new and extended C++ Synchronization objects library from:

https://sites.google.com/site/aminer68/c-synchronization-objects-library

Author: Amine Moulay Ramdane

Email: aminer@videotron.ca

Description:

This library contains 9 synchronization objects, first one is  my scalable SeqlockX that is a variant of Seqlock that eliminates the weakness of Seqlock that is "livelock"of the readers when there is more writers, and second is my scalable MLock that is a scalable lock , and third is my SemaMonitor that combines all characteristics of a semaphore and  an eventcount and also a windows Manual-reset event and also a windows Auto-reset event, and fourth is my scalable DRWLock that is a scalable reader-writer lock that is starvation-free and it does spin-wait, and five is is my scalable DRWLockX that is a scalable reader-writer lock that is starvation-free and it doesn't spin-wait, but it waits on the Event objects and my SemaMonitor, so it is energy efficient, and six one is my scalable asymmetric DRWLock that  doesn't use any atomic operations and/or StoreLoad style memory barriers on the reader side, so it look like RCU, and it is fast.  This scalable Asymmetric Distributed Reader-Writer Mutex is FIFO fair on the writer side and FIFO fair on the reader side and of course it is starvation-free and it does spin-wait, and seven one is my scalable asymmetric DRWLockX that doesn't use any atomic operations and/or StoreLoad style memory barriers on the reader side, so it look like RCU, and it is fast.  This scalable Asymmetric Distributed Reader-Writer Mutex is FIFO fair on the writer side and FIFO fair on the reader side and of course it is starvation-free, and it does not spin-wait, but it waits on Event objects and my SemaMonitor, so it is energy efficient, and eight is my LW_Asym_RWLockX that is a lightweight scalable Asymmetric Reader-Writer Mutex that uses a technic that looks like Seqlock without looping on the reader side like Seqlock, and this has permited the reader side to be costless, it is FIFO fair on the writer side and FIFO fair on the reader side and it is of course Starvation-free and it does spin-wait,  and nine is my Asym_RWLockX, a lightweight scalable Asymmetric Reader-Writer Mutex that uses a technic that looks like Seqlock without looping on the reader side like Seqlock, and this has permited the reader side to be costless, it is FIFO fair on the writer side and FIFO fair on the reader side and it is of course Starvation-free and it does not spin-wait, but waits on my SemaMonitor, so it is energy efficient.

If you take a look at the zip file , you will notice that it contains the DLLs Object pascal source codes, to compile those dynamic link libraries source codes you will have to download my SemaMonitor Object pascal source code and my SeqlockX Object pascal source code and my scalable MLock Object pascal source code and my scalable DRWLock Object pascal source code from here:

https://sites.google.com/site/aminer68/

I have compiled and included the 32 bit and 64 bit windows Dynamic Link libraries inside the zip file, if you want to compile the dynamic link libraries for Unix and Linux and OSX on (x86) , please download the source codes of my SemaMonitor and my scalable SeqlockX and my scalable MLock and my scalable DRWLock and compile them yourself.

My SemaMonitor of my C++ synchronization objects library is easy to use, it combines all characteristics of a semaphore and an eventcount and also a windows Manual-reset event and also a windows Auto-reset event, here is its C++ interface:

class SemaMonitor{
public:
    SemaMonitor(bool state, long2 InitialCount1=0,long2 MaximumCount1=INFINITE);
    ~SemaMonitor();

void wait(unsigned long  mstime=INFINITE);
void signal();
void signal_all();
void signal(long2 nbr);
void setSignal();
void resetSignal();
long1 WaitersBlocked();
};

So when you set the first parameter that is state of the constructor to true. it will add the characteristic of a Semaphore to the to the Eventcount, so the signal will not be lost if the threads are not waiting for the SemaMonitor objects, but when you set the first parameter of the construtor to false, it will not behave like a Semaphore because if the threads are not waiting for the SemaCondvar or SemaMonitor the signal will be lost..

the parameters InitialCount1 and MaximumCount1 is the semaphore InitialCount and MaximumCount.

The wait() method is for the threads to wait on the SemaMonitor object for the signal to be signaled.

and the signal() method will signal one time a waiting thread on the SemaMonitor object.

the signal_all() method will signal all the waiting threads on the SemaMonitor object.

the signal(long2 nbr) method will signal nbr number of waiting threads

the setSignal() and resetSignal() methods behave like the windows Event object's methods that are setEvent() and resetEvent().

and WaitersBlocked() will return the number of waiting threads on the SemaMonitor object.

As you have noticed my SemaMonitor is a powerful synchronization object.

Please read the readme files inside the zip file to know more about them..

Language: GNU C++ and Visual C++ and C++Builder

Operating Systems: Windows, Linux, Unix and OSX on (x86)



Thank you,
Amine Moulay Ramdane. 

 

 

 

0 Kudos
0 Replies
Reply