Книга: Программирование для 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;
}
- Отгадывание чисел
- 4.12. Вычисление выражений
- 6.11. Вычисление арифметических выражений
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Глава 2 Вычисление
- Листинг 3.1. Конфигурационный файл lilo.conf
- Листинг 3.2. Файл настройки программы inittab
- Листинг 3.3. Файл
- Листинг 3.4. Информация о конфигурации и состоянии сети
- Листинг 4.1. Файл
- Листинг 4.2. Содержимое конфигурационного файла