搜索
bottom↓
回复: 2

关于RT-Threads线程建立的疑惑

[复制链接]

出0入0汤圆

发表于 2011-3-22 11:01:32 | 显示全部楼层 |阅读模式
在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个不同的线程,但是是如何区分的呢?他们的所有参数都是一样的呀,很疑惑,望指点下

出0入0汤圆

发表于 2011-3-22 12:01:48 | 显示全部楼层
这个估计是比较早期的文档,这个代码,你可以看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会动态创建一个线程控制块和栈,这两个线程的是完全不同的物理内存地址。

出0入0汤圆

 楼主| 发表于 2011-3-22 12:57:09 | 显示全部楼层
感谢ffxx的分析,我又仔细的看了一下函数跳转。
我理解的是就算这些参数都是一样的,但是rt_thread_create生成的线程控制块的地址是不一样的。他们只是2个外表看似“一样”的线程。
当然如果采用了不一样的字符串能分辨出是2个不一样的线程,用不一样的函数入口参数能够实现不一样的功能效果。
不知道我这样理解对不对?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-6 08:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表