2009-12-23 46 views
0

什麼時候確定的線程數的區別,如:確定並確定線程數量時有什麼不同?

for (i*10){ 
    ... 
    pthread_create(&thread[i], NULL, ThreadMain[i], (void *) xxx); 
    ... 
} 

,當它是不確定的,就像這樣:

... 
    pthread_create(&threadID, NULL, ThreadMain, (void *) xxx); 
    ... 

在我的案例數,我可以從1 VARRY到10.如果例如我用的是第一種方法,我需要創造10次爲如:

void *ThreadMain1(void *xxx) 
{ 
    ... 
} 

直到...

但是,如果使用第二種方法,我需要建立公正:

void *ThreadMain(void *xxx) 
{ 
    ... 
} 

那麼哪一個是正確的?

感謝您的時間和答覆,

+0

創建10個線程肯定是錯誤的。 – 2009-12-23 10:05:50

+0

爲什麼?那麼你的建議是什麼?謝謝 – make 2009-12-23 10:22:58

回答

2

如果線程正在做同樣的工作,他們應該使用相同的功能(不同的輸入可能),那麼一個ThreadMain是正確的做法。

2
  • 線程做同樣的任務應該使用相同的函數
  • 線程做不同的任務應該使用不同的功能
0

第一種方法是無效的語法除非ThreadMain已被定義爲的函數數組指針。那就是:

pthread_create(&thread[i], NULL, ThreadMain[1], (void *) xxx); 

不會調用一個名爲ThreadMain1除非先前已沿着線做了一些功能:

FuncPtr_t ThreadMain[10]; 
ThreadMain[1] = &ThreadMain1; 

如果你只是想創建10個線程運行同一任務,則第二種方法是正確的。

+0

對不起!你是對的,這就是爲什麼我有一個問題 連接數取決於要模擬的問題(因爲它可以有1個或更多),但限於10個。 其實我有同步這就是爲什麼我試圖都。如果有三個客戶端,那麼通信應該按順序同步,即在每次交換時1,2,3,直到第一個終止,然後開始第二個......這怎麼可能? 非常感謝您的回覆 – make 2009-12-23 13:02:53

+0

我真的不明白你在做什麼。我認爲你應該開始另一個線索,並解釋你想要達到的目標,而不是你認爲你應該達到的目標。也許你應該傳遞線程的數量作爲參數xxx,但如果你希望順序完成的話,你可能根本不需要線程...... – Patrick 2009-12-23 14:41:30