2011-09-13 166 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); 
} 
相關問題