使用者工具

網站工具


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);

關於restrict

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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki