Резьба Posix c - PullRequest
       91

Резьба Posix c

0 голосов
/ 05 августа 2020

Я читаю книгу Эндрю и Брейси «Все о программировании». В настоящее время я использую параллелизм и наткнулся на эту функцию:

void smoothParallel(image_t * src, image_t * dst, int nThreads){
   int perThread = src->height/ nThreads + 1;
   int extras = src->height/nThreads;
   ...
   pthread_t * threads = malloc(nThreads * sizeof(*threads));
   for(int i = 0; i < nThreads; i++){
      ...
      perThread--;
   }
   thr_arg * arg = malloc(sizeof(*arg));                     
   arg->src = src;
   arg->dst = dst;
   arg->startY = curr;
   arg->endY = curr + perThread;
   curr += perThread; 
   pthread_create(&threads[i], NULL, smoothThread, arg);
   for (int i = 0; i < nThreads ; i++) {
       pthread_join(threads[i], NULL);
   }
}

Итак, то, что я не мог понять, это int perThread = src->height/nThreads + 1;, почему это nThreads + 1 не просто nThreads, я знаю, что это наивно есть что спросить, но я не мог понять причину этого.

1 Ответ

0 голосов
/ 07 августа 2020

Я обнаружил, что nThreads + 1 является основным потоком, поскольку есть N + 1 основной поток, который порождает поток и ожидает рабочего потока, который равен N.

...