簡體   English   中英

C,如何使用pthread_create函數創建線程

[英]C , how to create thread using pthread_create function

我正在為一個調度隊列制作一個ac文件,該隊列獲取一個任務並將其放入一個鏈接列表的隊列中。 為了做到這一點,我需要使用創建線程

pthread_t cThread;
if(pthread_create(&cThread, NULL, work, param)){
    perror("ERROR creating thread.");
}

但是我需要創建另一個作為'work'和'param'變量的函數作為create function的參數。 我的朋友告訴我,我只需要在無限循環的工作函數中放入任何代碼,這樣線程就不會死。任何人都可以解釋每個參數進入pthread_create函數 - 特別是對於workparam 我搜索谷歌這個,但大多數教程都很難理解這個概念......

pthread_create的四個參數依次為:

  1. 指向pthread_t結構的指針, pthread_create將使用其創建的線程填充信息。

  2. 指向帶有線程參數的pthread_attr_t的指針。 您可以安全地在大多數時間傳遞NULL

  3. 一個在線程中運行的函數。 該函數必須返回void *並獲取一個void *參數,您可以使用它,但是您認為合適。 (例如,如果您使用相同的函數啟動多個線程,則可以使用此參數來區分它們。)

  4. 要啟動線程的void * 如果您不需要,則傳遞NULL

澄清duskwuff的答案:

work參數是一個函數指針。 該函數應該采用一個參數,該參數表示為類型void *並返回值void *

param應該是指向work將接收的數據的指針。

舉個例子,假設您想將兩個int傳遞給worker。 然后,你可以創建這樣的東西:

int *param = (int *)malloc(2 * sizeof(int));
param[0] = 123;
param[1] = 456;
pthread_create(&cThread, NULL, work, param);

然后你的工作函數可以轉換指針類型並獲取參數數據:

void *work(void * parm) {
    int *param = (int *)parm;
    int first_val = param[0];
    ....
}

您可以執行更復雜的操作,例如創建包含您需要傳遞的所有數據的結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM