2014-01-06 79 views
0

我對我寫了一個小程序運行一些測試。它運行另一個程序,它根據我給它的輸入執行一些文件操作。這一計劃的全部目的就是要打破工作的一個大包成小包,以提高性能(發送10小包10個版本的程序,而不是等待一個更大的一個來執行,簡單的分而治之的)。不確定爲什麼會產生這麼多線程

問題在於這樣一個事實,雖然我相信我已經限制了將要創建的線程數,我已經設置了測試消息表明有許多不是應該有運行多個線程。我很確定我在這裏做錯了什麼。

代碼片斷:

if (finish != start){ 
    if (sizeOfBlock != 0){ 
      num_threads = (finish - start)/sizeOfBlock + 1; 
     } 
    else{ 
     num_threads = (finish-start) + 1; 
    } 
    if (num_threads > 10){ // this should limit threads to 10 at most 
     num_threads == 10; 
    } 
    else if (finish == start){ 
     num_threads = 1; 
    } 
} 



    threads = (pthread_t *) malloc(num_threads * sizeof(pthread_t)); 

    for (i = 0; i < num_threads; i++){ 
     printf("Creating thread %d\n", i); 
     s = pthread_create(&threads[i], NULL, thread, &MaxNum); 
     if (s != 0) 
      printf("error in pthread_create\n"); 
     if (s==0) 
      activethreads++; 
    } 
    while (activethreads > 0){ 
     //printf("active threads: %d\n", activethreads); 
    } 
    pthread_exit(0); 
+0

好吧,也許你應該打印出來NUM_THREADS的價值,不是嗎? – OldProgrammer

+0

你malloc的線程數,但我沒有看到一個免費的()。 – hetepeperfan

回答

2

此代碼是無用:

if (num_threads > 10){ // this should limit threads to 10 at most 
    num_threads == 10 
} 

num_threads == 10比較num_threads10然後拋出程。你想分配,而不是:

if (num_threads > 10){ // this should limit threads to 10 at most 
    num_threads = 10; 
} 

此外,還有許多;缺少你的代碼,在未來,請儘量提供一個自包含的例子,編譯代碼。

+0

我們對此深感抱歉,我加了括號使if語句更清楚(他們以前只是單一的線)。謝謝你指出等值與賦值符號,我一定忽略了那十次。 –

+0

@MarshallTigerus沒問題,它發生在最好的;) –

相關問題