pthread:start
國立屏東大學 即時與嵌入式系統實驗室
PThreads Programming Examples
基礎
pthread_create()建立執行緒
Header File
pthread.h
Prototype
int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void *), void *restrict arg);
Parameters
- thread: An opaque, unique identifier for the new thread returned by the subroutine. 此參數的型態為pthread_t,其實作通常為unsigned long int。此參數用以得到所產生的thred的thread ID。
- attr: An opaque attribute object that may be used to set thread attributes. You can specify a thread attributes object, or NULL for the default values. attr可以使用pthread_attr_init()以預設值建構一個pthread_attr_t的物件,其屬性可參考 此處的說明。
- start_routine: the C routine that the thread will execute once it is created. 此函式稱為執行緒函式,也就是要以thread形式執行的函式。
- arg: A single argument that may be passed to start_routine. It must be passed by reference as (void *). NULL may be used if no argument is to be passed. 要傳遞給執行緒函式的引數。
使用範例
要使用pthread_create(),先考慮以下的c語言函式thrd_printHello():
void * thrd_printHello() { printf("Hello\n"); return NULL; }
以下的pthread_create()呼叫,將會建立一個執行緒來執行thrd_printHello()函式:
pthread_t thrdID; pthread_create( &thrdID, NULL, thrd_printHello, NULL);
我們可以將thrd_printHello()改為接收一個字串並將其輸出:
void * thrd_printString(char *str) { printf("%s\n", str); return NULL; }
以下的pthread_create()呼叫,則會將一個字串常值傳遞給新的thrd_printString函式:
pthread_t thrdID; pthread_create( &thrdID, NULL, (void *)thrd_printString, "Hello");
要特別注意的是,上面的thrd_printString引數的原型為
(void *)(*thrd_printString)(char *)與
void *(*start_routine)(void *)並不相同,所以必須進行轉型。
pthread/start.txt · 上一次變更: 2023/11/19 14:44 由 junwu