[英]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.