关于RT-Threads线程建立的疑惑
在RT-Threads编程指南中关于线程建立的例子中:/*
* 程序清单:动态线程
*
* 这个程序会初始化2个动态线程,它们拥有共同的入口函数,但参数不相同
*/
.....................
int thread_dynamic_simple_init()
{
rt_thread_t thread1;
rt_thread_t thread2;
thread1 = rt_thread_create("thread",
thread_entry, RT_NULL,
512,
20, 5);
if (thread1 != RT_NULL)
rt_thread_startup(thread1);
thread2 = rt_thread_create("thread",
thread_entry, RT_NULL,
512,
20, 5);
if (thread1 != RT_NULL)
rt_thread_startup(thread2);
........
}
手册里面提到这是2个不同的线程,但是是如何区分的呢?他们的所有参数都是一样的呀,很疑惑,望指点下 这个估计是比较早期的文档,这个代码,你可以看svn上最新的:
http://rt-thread.googlecode.com/svn/trunk/examples/kernel/thread_dynamic_simple.c
其中不同的:
int thread_dynamic_simple_init()
{
/* 创建线程1 */
tid1 = rt_thread_create("t1",
thread_entry, (void*)1, /* 线程入口是thread_entry, 入口参数是1 */
THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
if (tid1 != RT_NULL)
rt_thread_startup(tid1);
else
tc_stat(TC_STAT_END | TC_STAT_FAILED);
/* 创建线程2 */
tid2 = rt_thread_create("t2",
thread_entry, (void*)2, /* 线程入口是thread_entry, 入口参数是2 */
THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
if (tid2 != RT_NULL)
rt_thread_startup(tid2);
else
tc_stat(TC_STAT_END | TC_STAT_FAILED);
return 0;
}
即,它们的入口参数是不同的。但是最关键的是,rt_thread_create会动态创建一个线程控制块和栈,这两个线程的是完全不同的物理内存地址。 感谢ffxx的分析,我又仔细的看了一下函数跳转。
我理解的是就算这些参数都是一样的,但是rt_thread_create生成的线程控制块的地址是不一样的。他们只是2个外表看似“一样”的线程。
当然如果采用了不一样的字符串能分辨出是2个不一样的线程,用不一样的函数入口参数能够实现不一样的功能效果。
不知道我这样理解对不对?
页:
[1]