syok_2001 发表于 2010-4-14 16:10:35

请问什么事动态线程什么事静态线程 他们有什么区别啊

请问什么事动态线程什么事静态线程 他们有什么区别啊

shaolin 发表于 2010-4-14 18:04:10

RT-Thread中支持静态和动态两种定义方式。用线程来举例的话,rt_thread_init对应静态定义方式,rt_thread_create对应动态定义方式。
使用静态定义方式时,必须先定义静态的线程控制块,并且定义好堆栈空间,然后调用rt_thread_init来完成线程的初始化工作。采用这种方式,线程控制块和堆栈占用的内存会放在RW段,这段空间在编译时就已经确定,它不是可以动态分配的,所以不能被释放。而只能使用rt_thread_detach函数将该线程控制块从对象管理器中脱离。
使用动态定义方式rt_thread_create时,RT-Thread会动态申请线程控制块和堆栈空间。在编译时,编译器是不会感知到这段空间的,只有在程序运行时,RT-Thread才会从系统堆中申请分配这段内存空间,当不需要使用该线程时,调用rt_thread_delete函数就会将这段申请的内存空间重新释放到内存堆中。
这两种方式各有利弊,静态定义方式会占用RW空间,但是不需要动态分配内存,运行时效率高。
动态方式不会占用额外的RW空间,占用空间小,但是运行时需要动态分配内存,效率没有静态方式高。
总的来说,这两种方式就是空间和时间效率的平衡,可以根据实际环境需求选择采用具体的分配方式。

ffxz 发表于 2010-4-14 19:10:59

另外,针对STM32,如果使用了EXT SRAM,那么通常动态内存是开在EXT SRAM上的,所以rt_thread_create创建处理的线程运行时速度也会要慢一些。

syok_2001 发表于 2010-4-15 08:45:53

谢谢,看了回复后打算在产品中用一下RT-THREAD了

cyxavr 发表于 2010-4-15 09:03:45

昨天正在收音机群里问过类似问题,在这里得到了我要的答案了。谢谢。

xieshang 发表于 2010-12-1 14:56:48

学习了,说得很详尽
页: [1]
查看完整版本: 请问什么事动态线程什么事静态线程 他们有什么区别啊