Thu Jul 17 21:00:00 GMT 2008
Raphael Derosso Pereira wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> I'm working with FreeRTOS and want to use _REENT, but I don't know how
> to setup this in a multithread environment. Is there any function that
> can be used to specify the current _REENT structure on context switch?
All that is needed is to set the global variable: _impure_ptr to a new
reentrancy structure you have previously
initialized via the _REENT_INIT() macro. See libc/reent/impure.c You
can do this manually in your
thread switching logic or you can do the following:
If you set the flag __DYNAMIC_REENT__ for your platform, newlib functions
requiring reentrancy will call __getreent() to get the reentrancy
structure for the current thread automatically.
You need to supply this function and how it is implemented is up to
you. One way would be using thread-specific storage if you support it.
Another way would be to use a global hash table or array indexed by
thread-id. It's up to you. You would register a new reentrancy
structure on thread creation. Typically you set
the __DYNAMIC_REENT__ flag in libc/include/sys/config.h.
If you don't use __DYNAMIC_REENT__, then you either have to set
_impure_ptr manually or else you can use the reentrant versions of the
newlib functions and call with the appropriate reentrancy structure as a
-- Jeff J.
> - --
> Raphael Derosso Pereira
> Engenheiro de ComputaÃ§Ã£o
> icq: 4517421
> msn: firstname.lastname@example.org
> Skype: rderossopereira
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.6 (GNU/Linux)
> Comment: http://getfiregpg.org
> -----END PGP SIGNATURE-----
More information about the Newlib