2011-09-13 167 views
0

我想知道一个线程入口函数的区别:线程入口函数和正常函数有什么区别?

void* thread_function (void* parameter) 
{ 
    struct parameter * thread_data = (struct parameter *)parameter; 
    char buffer[20]; 
    int temp; 
    printf_buffer(buffer); 
} 

和正常功能:

void printf_buffer(char *buffer) 
{ 
    printf("buffer is %s",buffer); 
    return; 
} 

我知道创建一个线程,当一个线程进入被调用,以及如何正常功能被使用。

在执行,行为或创建实例方面,线程入口函数和正常函数之间是否还有其他区别?

+3

请定义“线程函数”和“正常函数”。 –

+0

问题不清。你在想什么功能/库? – Thilo

回答

4

有你叫什么语言之间没有什么区别“线程函数“(虽然Justin编辑称它为”线程入口函数“),你称之为”正常函数“。

随着并行线程,即所谓的“启动程序”线程的是一个函数,它接受一个void*参数和返回void*,但没有什么可以阻止你调用同一个功能“正常”。

当线程的启动例程返回时,线程完成执行,但这只是因为线程实现调用它,然后完成线程。这并不是因为启动例程本身有什么特别之处。

1

线程函数只是线程的入口/出口点。该函数的执行与您所说的普通函数没有什么不同。

+0

在ma上面的例子中看到,如果我创建了5个线程,所以每个线程函数在缓冲区中都有不同的值,现在当所有线程函数的printf_buffer都能正常工作时。我的意思是会有5个printf_buffer实例..? –

+2

@Mr。 32:没有这种功能的“实例”。只有一个'printf_buffer'函数。只有一个'thread_function'函数。自动变量是为函数的每次调用分别创建的,无论这些调用是在同一个线程还是在不同的线程中。 –

+0

哦谢谢steave jessop ..这就是我迷惑 –

1

man pthread_create定义它非常好:即尚未提及

http://linux.die.net/man/3/pthread_create

一个主要的区别就是线程的入口应该会比呼叫者的其他堆栈上运行。因为这个原因,你会经常想通过资源堆副本为你的说法,当你的线程分离,然后再释放它的条目:

// the caller must pass a heap copy of struct parameter* arg 
void* detached_entry(void* arg) { 

    struct parameter* parameter = (struct parameter*)arg; 
    ... 
    free(parameter); 
} 
相关问题