Redlib malloc - thread safe?

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Redlib malloc - thread safe?

759 次查看
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by jharwood on Tue Apr 26 12:30:28 MST 2011
I would like to use the stdlib functions malloc and friends, printf and friends in a RTOS environment.

It appears that malloc is not thread safe, I tried declaring a function
void __malloc_lock(void)
but it was not called. I also stepped through the malloc code to see if there were any 'cpsie i' and 'cpsid i' instructions in there.

So I guess that I have to wrap every call to the standard library functions with the appropriate OS guard calls.

Is there any possibility that the __malloc_lock and __malloc_unlock stubs could be added to the Redlib library?

Thanks
0 项奖励
回复
4 回复数

672 次查看
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by CodeRedSupport on Tue Apr 26 23:57:32 MST 2011

Quote: jharwood

Is there any possibility that the __malloc_lock and __malloc_unlock stubs could be added to the Redlib library?


At present we have no plans to make Redlib thread safe - we have seen little or no demand for this (to date). Our recommendation if you want thread safe is to use Newlib, or wrap the Redlib functions yourself (as you have already suggested).

Regards,
CodeRedSupport
0 项奖励
回复

672 次查看
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by larryvc on Tue Apr 26 15:14:32 MST 2011

Quote: jharwood
Each thread of execution holds its own copy of the _reent structure which takes up 240 bytes of memory.



That's a lot considering we were trying to get a simple blinky to weigh in at around 200 bytes.:) I know, slightly off topic, and I'm a bit bored.:D
0 项奖励
回复

672 次查看
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by jharwood on Tue Apr 26 14:45:34 MST 2011

Quote: TheFallGuy
Have you tried Newlib instead? IIRC, that provides the lock functions.



Thanks for the suggestion TheFallGuy.

It's a much larger library, as CodeRed points out. Each of the function calls need to be changed to, for example; _printf_r() and the first argument is a pointer to a struct _reent.  Each thread of execution holds its own copy of the _reent structure which takes up 240 bytes of memory.
0 项奖励
回复

672 次查看
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by TheFallGuy on Tue Apr 26 13:20:12 MST 2011
Have you tried Newlib instead? IIRC, that provides the lock functions.
0 项奖励
回复