какая разница, когда количество потоков определено и не определено? - PullRequest
0 голосов
/ 23 декабря 2009

какая разница при определении количества потоков, например ::100100

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

и когда оно не определено, просто так:

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

В моем случае число, которое я могу варьировать от 1 до 10. Если, например, Я использую первый метод, мне нужно создать 10 раз как, например ::100100

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

до ...

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

Но если я использую второй метод, мне нужно создать просто:

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

Так какой из них правильный?

Спасибо за ваше время и ответы,

Ответы [ 3 ]

2 голосов
/ 23 декабря 2009
  • потоки, выполняющие одинаковые задачи, должны использовать одну и ту же функцию
  • потоки, выполняющие разные задачи, должны использовать разные функции
2 голосов
/ 23 декабря 2009

Если потоки выполняют одни и те же задачи, они должны использовать одну и ту же функцию (возможно, с другим вводом), поэтому один ThreadMain - правильный путь.

0 голосов
/ 23 декабря 2009

Первый метод не является допустимым синтаксисом, если ThreadMain не определен как массив указателей на функции. То есть:

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

не вызывает функцию с именем ThreadMain1, если вы ранее не сделали что-то вроде:

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

Если вы просто пытаетесь создать 10 потоков, выполняющих одну и ту же задачу, тогда второй метод верен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...