Составители:
Рубрика:
if P1!value2 --> P1?value1;
# выдать процессу P1 значение value2
# (если он готов принять),
# у процесса P1 запросить значение value1
[ ] P1?value1 --> P1!value2;
# у процесса P1 запросить значение value1
# выдать процессу P1 значение value2
fi
}
Замечание. Напомним, что в подобных ситуациях альтернатива
выбирается недетерминированно.
§ 4. Программа генерации простых чисел
Здесь опять воспользуемся языком CSP. Пусть нам нужно найти
простые числа между 2 и n. Сначала задается список всех таких
чисел
2 3 4 5 6 . . . n
Вычеркнем числа, кратные двум, кроме первого, считая n нечет-
ным числом, получим
2 3 5 7 9 . . . n
Затем вычеркнем все числа, кратные трем, кроме первого. Если
продолжить этот процесс далее, то останутся лишь простые числа
от 2 до n.
Приведенный алгоритм называется решето Эратосфена.
Будем распараллеливать этот алгоритм , используя конвейер
процессов-фильтров.
Каждый фильтр получает поток чисел от своего предшествен-
ника, отделяет первое число и посылает своему преемнику все чис-
ла, некратные первому числу потока. Отделяемые числа являются
простыми.
process Sieve[1] {
int p=2;
for [i=3 to n by 2]
Sieve[2]!i; # - передать нечетные числа Sieve[2]
}
58
Страницы
- « первая
- ‹ предыдущая
- …
- 55
- 56
- 57
- 58
- 59
- …
- следующая ›
- последняя »