[fpc-devel] Parallel procedures

Michael Schnell mschnell at lumino.de
Fri Jun 15 10:14:39 CEST 2012

On 06/15/2012 08:46 AM, Sven Barth wrote:
> The Linux unit already contains Futex functions that directly call the 
> kernel (since around two years already).
I did not check the RTL source code.  But it needs to be noted that the 
term "call Futex" is rather unclear.

There is a Kernel function "FUTEX" that helps to implement a Futex 
("Fast Userspace MUTEX") based Semaphore.

But the idea with FUTEX is in by far most cases _not_ to all this kernel 
function, but to handle the Semaphore completely in Userspace, if not 
taken. The userspace code related to Futex is very critical ASM stuff 
and not easy to do. (See "FUTEXES are tricky" by Ulrich Drepper 
http://people.redhat.com/drepper/futex.pdf ) So providing a wrapper for 
the Futex Kernel call does not help at all).

For C, the userspace code is done in the pthread library. (In fact, 
pthread_mutex_..() uses the Futex mechanism if the architecture in fact 
does provide the appropriate CPU instructions and the Kernel provides 
the related kernel call - which of course is for X86 / X86/64 and modern 
Linux - , otherwise it just uses the appropriate Kernel Space MUTEX call.).

What I meant is that the RTL should implement e.g. TCriticalSection (and 
whatever might be used to provide multi-thread libraries and/or language 
extensions) using the FUTEX mechanism without needing the pthread libc 
library. (Maybe this already is done.)


More information about the fpc-devel mailing list