Книга: Программирование для Linux. Профессиональный подход

Листинг 4.4. (primes.с) Вычисление простых чисел в потоке

Листинг 4.4. (primes.с) Вычисление простых чисел в потоке

#include <pthread.h>
#include <stdio.h>
/* Находим простое число с порядковым номером N, где N -- это
   значение, на которое указывает параметр ARG. */
void* compute_prime(void* arg) {
 int candidate = 2;
 int n = *((int*)arg);
 while (1) {
  int factor;
  int is_prime = 1;
  /* Проверка простого числа путем последовательного деления. */
  for (factor = 2; factor < candidate; ++factor)
   if (candidate % factor == 0) {
    is_prime = 0;
    break;
   }
  /* Это то простое число, которое нам нужно? */
  if (is_prime) {
   if (--n == 0)
    /* Возвращаем найденное число в программу. */
    return (void*)candidate;
  }
  ++candidate;
 }
 return NULL;
}
int main() {
 pthread_t thread;
 int which_prime = 5000;
 int prime;
 /* Запускаем поток, вычисляющий 5000-е простое число. */
 pthread_create(&thread, NULL, &compute_prime, &which_prime);
 /* Выполняем другие действия. */
 /* Дожидаемся завершения потока и принимаем возвращаемое им
    значение. */
 pthread_join(thread, (void*)&prime);
 /* Отображаем вычисленный результат. */
 printf("The %dth prime number is %d.n", which_prime, prime);
 return 0;
}

Оглавление книги


Генерация: 1.348. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз