[fpc-devel] Threading support and C library under Linux/Unix
Michael Schnell
mschnell at lumino.de
Thu Jun 24 11:59:20 CEST 2010
On 06/24/2010 11:05 AM, Henry Vermaak wrote:
>
> /* Atomic compare and exchange. These sequences are not actually atomic;
> there is a race if *MEM != OLDVAL and we are preempted between the two
> swaps. However, they are very close to atomic, and are the best that a
> pre-ARMv6 implementation can do without operating system support.
> LinuxThreads has been using these sequences for many years. */
>
>
:) :) :) "Very close to atomic" is funny, regarding that the (obviously
rare) case of non-atomic behavior will cause a system crash.
> The linux specific code is here..
>
I suppose this uses the said "atomic region" method:
- Userspace (without doing a change to system mode) calls a function
provided by the system in a dedicated place (in user-space, write
protected and common for all processes)
- if no interrupt happens everything is fine
- the interrupt code in the Kernel detects if the interrupted user
space function was preempted in the middle of such a function (i.e. PC
in the atomic area)
- if such a condition is detected the kernel correctly completes the
function for the user space process and adjusts the user space PC before
returning to user space into this or another procedure / thread.
With such systems the C library (i.e. macros in .h files) for
"atomic_..."-functions is provided as a call to the appropriate "atomic
region" function.
Of course this can be done directly in the RTL, as the addresses of the
"atomic_..."-functions is supposed to be stable.
-Michael
More information about the fpc-devel
mailing list