簡體   English   中英

pthread - 如何在不調用 join 的情況下開始運行新線程?

[英]pthread - How to start running a new thread without calling join?

我想從主線程開始一個新線程。 我不能使用 join 因為我不想等待線程退出然后恢復執行。
基本上我需要的是 pthread_start(...) 之類的東西,但找不到。

編輯:
由於所有答案都建議 create_thread 應該啟動線程,問題是在下面的簡單代碼中它不起作用。 下面程序的output是“主線程”。 似乎子線程從未執行過。 知道我哪里錯了嗎?
在 Fedora 14 GCC 版本 4.5.1 上編譯並運行

void *thread_proc(void* x)
{
   printf ("sub thread.\n");
   pthread_exit(NULL);
}


int main()
{
    pthread_t t1;
    int res = pthread_create(&t1, NULL, thread_proc, NULL);
    if (res)
    {
        printf ("error %d\n", res);
    }

    printf("main thread\n");
    return 0;
}

啟動線程的 function 是pthread_create ,而不是pthread_join 只有在准備好等待和重新同步時才使用pthread_join ,如果分離線程,則根本不需要使用它。 您也可以從不同的線程加入。

在退出之前(通過調用exit或從main返回),您必須確保沒有其他線程正在運行。 一種方法(但不是唯一的)是加入您創建的所有線程。

您的代碼的行為取決於調度程序; 可能主程序在創建的線程中的 printf 執行之前退出。 我希望 main() 末尾的簡單 sleep(some_seconds) 會導致線程 output 出現:)

join調用等待線程終止並退出。

如果您希望主線程在子線程執行時繼續執行,請不要調用join :子線程將與主線程同時執行...

只需創建將 detached 屬性設置為 on 的線程。 為此,您可以在創建線程后調用pthread_detach或在創建線程之前調用pthread_attr_setdetachstate

當一個線程被分離時,父線程不必等待它,也無法獲取它的返回值。

你需要在 man() 的末尾調用 pthread_exit,這將導致 main 等待其他線程啟動和退出。 或者你可以顯式調用 pthread_join 來等待新創建的線程

否則,當 main 返回時,該進程將被殺死,並且它創建的所有線程都將被殺死。

創建線程時,線程會自動啟動。

您不需要調用pthread_create嗎?

static void *thread_body(void *argument) { /* ... */ }

int main(void) {
    pthread_t thread;
    pthread_create(&thread, NULL, thread_body, NULL);
    /* ... */

暫無
暫無

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

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