如何从线程调用的函数返回

时间:2012-04-27 00:01:00

标签: c multithreading

一个非常基本的概念怀疑。 请不要因为这个愚蠢的问题而恨我

如果我们从主函数

中的一个线程调用下面的函数
    char * function()
    {
            char message[10];
            .................
            ....do sth ......
            return message;
    }

在这种情况下,内部缓冲区是自动的,并在线程函数返回后立即消失。

但这样做有效

    char * function()
    {
            char * message = (char*)malloc(10);
            .................
            ....do sth ......
            return message;
    }

我对以下几行感到困惑。这怎么解决了这个问题?

Each thread will allocate a different array and store the address of that array in a stack variable. Every thread has its own stack so automatic data objects are different for each thread.

1 个答案:

答案 0 :(得分:1)

  

每个线程将分配一个不同的数组并存储地址   堆栈变量中的数组。每个线程都有自己的堆栈   每个线程的自动数据对象都不同。

此评论与您的​​第二个代码段无关。这个注释意味着什么,因为每个线程都有自己的堆栈;如果多个线程同时调用同一个函数,它们会将局部变量推送到各自的堆栈中,因此不会产生冲突。

实际上你的第二个代码片段是有效的,因为每次调用该函数时,你都会动态分配新的堆内存并返回指向它的指针。

注意:一旦完成内存后取消分配内存通常会很好:)

另外:是您的第一个代码段& james'& corbin's以上评论;这个函数,虽然有点怀疑是无效的〜,例如,see here