2015-11-03 60 views
0

說我在while循環使用pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*fun) (void *), void *arg)的並行線程,會發生什麼的線程(S)一旦完成功能fun(),它也屬於中環與主線程,如果我有什麼請撥int pthread_detach(pthread_t thread)還是隻有主線留在循環?發生,當它退出函數

例子:

pthread_t t[NTHREADS]; 

int i = -1; 
while(1){ 

    //do something 
    ++i; 

    pthread_create(&t[i], NULL, fun, (void *)i); 
    pthread_detach(t[i]); 

    //main thread goes on, created one detaches when finished 

} 

我想要做的就是每個線程提供它自己的客戶多客戶端服務器,有NTHREADS當某些線程完成fun()或者更確切地說,爲它服務的客戶端,然後在槽內t[]打開並且可以創建另一個線程(其他客戶端可以連接),如果它之前已滿。

+1

您需要一個互斥鎖來保護't',以便線程在返回之前可以安全地將't [i]'設置爲「未使用」的值。 – user3386109

回答

1

該規範聲明從線程函數返回等價於調用pthread_exit,並且線程函數的返回值變爲可用於pthread_join(假定您沒有分離線程)。

通常,這是通過讓pthread_create創建一個線程來開始執行固定(libc)「線程入口函數」來實現的。此入口函數調用您的函數,然後調用pthread_exit(完成任何相關清理之後)。

1

從其啓動函數返回的pthread相當於該線程調用pthread_exit。如果線程被分離,它就不復存在。