[fpc-pascal] Counting semaphore for free pascal

kapibara kapibara.pas at aol.com
Wed Jul 29 13:10:23 CEST 2015

Hi all,

@Serguei Thanks for your reply. What you write is probably right, but 
let me explain the problem.

In an application you have N number of threads and they all want to 
access a service. Now, for example, only five threads are allowed to 
have access at the same time. I believe this is a job for a counting 
semaphore. Delphi also has a semaphore. The code I wrote, as basic as it 
is, limits the simultaneous thread accesses to the service. So the 
semaphore is used here for synchronization of threads within the same 
application, and that is one of the intended uses of semaphores. A 
critical section blocks all threads except one, so I'm under the 
impression that it can't be used for this task.

Reason I wrote is because I have a feeling the code I wrote could be 
improved, or implemented differently altogether. A few weeks ago I never 
even heard about "counting semaphores". There seem to be not so much 
time spent on this subject in education, and many different opinions 
about what semaphores are and what they are used for can be found.

On 2015-07-29 12:35, Serguei TARASSOV wrote:
> Hello,
> On 29/07/2015 12:00, fpc-pascal-request at lists.freepascal.org wrote:
>> A counting, or general, semaphore limits simultaneous access to a
>> resource according to the number of permits you specify. On the other
>> hand, a binary semaphore like a critical section limits the access to
>> "one at a time".
> Seems, you confuse a little semaphores and critical sections.
> In general, semaphores are inter-process but critical sections are not.
> I mean that semaphores allow synchronize processes whereas critical 
> sections are designed to synchronize the threads within the same process.
> Some frameworks (i.e. .NET) provide classes like "threading semaphore" 
> but it is very particular case.
> It is possible to use real semaphores to synchronize the threads too 
> (with some overhead).

More information about the fpc-pascal mailing list