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


Groups > comp.programming.threads > #1716

SemaCondvar was updated to version 1.11

From aminer <aminer@toto.net>
Newsgroups comp.programming.threads, comp.programming
Subject SemaCondvar was updated to version 1.11
Date 2013-09-19 11:40 -0700
Organization albasani.net
Message-ID <l1f5u4$ten$1@news.albasani.net> (permalink)

Cross-posted to 2 groups.

Show all headers | View raw


Hello,

SemaCondvar was updated to version 1.11, i have included
a portable spinlock that is very efficient more efficient than the
Windows Critical section on both high contention and low contention, so 
SemaCondvar have given an excellent performance now.


Description:

SemaCondvar and SemaMonitor are new and portable synchronization objects 
that combine all the charateristics of a semaphore and a condition 
variable, they only use an event object and a critical section , so they 
are fast.
Now you can pass the SemCondvar's initialcount  and SemCondvar's 
MaximumCount to the construtor, it's like the Semaphore`s InitialCount 
and the Semaphore's MaximumCount.

Like this:

t:=TSemaMonitor.create(true,0,4);

When you pass True in the first parameter of the constructor the 
signal(s) will not be lost even if there is no waiting threads, if it's 
False the signal(s) will be lost if there is no waiting thread.


You can download SemaCondvar from:

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


Here is the methods that i have implemented :

TSemaCondvar = class
    public

constructor
Create(m1:TCriticalSection;state1:boolean=false;InitialCount1:longword=0;MaximumCount1:longword=INFINITE);
      destructor Destroy; override;
      function  wait(mstime:longword=INFINITE):boolean;
      procedure signal();overload;
      procedure signal_all();
      procedure signal(nbr:integer);overload;
      function WaitersBlocked:integer;
    end;

TSemaMonitor = class
    public
      constructor
Create(state1:boolean=false;InitialCount1:longword=0;MaximumCount1:longword=INFINITE);
      destructor Destroy; override;
      function  wait(mstime:longword=INFINITE):boolean;
      procedure signal();overload;
      procedure signal_all();
      procedure signal(nbr:integer);overload;
      function WaitersBlocked:integer;

    end;

Please take a look a the test.pas Object Pascal demo inside the zipfile, 
compile and run it...

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

Operating Systems: Windows, Mac OSX , Linux , Unix...


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

-Sd for delphi mode....

{$DEFINE CPU32} and {$DEFINE Windows32} for 32 bit systems

{$DEFINE CPU64} and {$DEFINE Windows64} for 64 bit systems

{$DEFINE OSX}  for Mac OSX on Delphi XE4 to XE5



Thank you,
Amine Moulay Ramdane..

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


Thread

SemaCondvar was updated to version 1.11 aminer <aminer@toto.net> - 2013-09-19 11:40 -0700
  Re: SemaCondvar was updated to version 1.11 aminer <aminer@toto.net> - 2013-09-19 13:34 -0700
  Re: SemaCondvar was updated to version 1.11 aminer <aminer@toto.net> - 2013-09-19 13:55 -0700

csiph-web