13.1.4. Назначение рандеву (и получение возвращенного значения)
13.1.4. Назначение рандеву (и получение возвращенного значения)
Иногда главный поток хочет дождаться завершения другого потока. Для этой цели предназначен метод join:
t1 = Thread.new { do_something_long() }
do_something_brief()
t1.join # Ждать завершения t1.
Отметим, что вызывать метод join необходимо, если нужно дождаться завершения другого потока. В противном случае главный поток завершится, а вместе с ним и все остальные. Например, следующий код никогда не напечатал бы окончательный ответ, не будь в конце вызова join:
meaning_of_life = Thread.new do
puts "Смысл жизни заключается в..."
sleep 10
puts 42
end
sleep 9
meaning_of_life.join
Существует полезная идиома, позволяющая вызвать метод join для всех «живых» потоков, кроме главного (ни один поток, даже главный, не может вызывать join для самого себя).
Thread.list.each { |t| t.join if t != Thread.main }
Конечно, любой поток, а не только главный, может вызвать join для любого другого потока. Если главный поток и какой-то другой попытаются вызвать join друг для друга, возникнет тупиковая ситуация. Интерпретатор обнаружит это и завершит программу.
thr = Thread.new { sleep 1; Thread.main.join }
thr.join # Тупиковая ситуация!
С потоком связан блок, который может возвращать значение. Следовательно, и сам поток может возвращать значение. Метод value неявно вызывает join и ждет, пока указанный поток завершится, а потом возвращает значение последнего вычисленного в потоке выражения.
max = 10000
thr = Thread.new do
sum = 0
1.upto(max) { |i| sum += i }
sum
end
guess = (max*(max+1))/2
print "Формула "
if guess == thr.value
puts "правильна."
else
puts "неправильна."
end
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
3.1. Назначение языка UML
3.1. Назначение языка UML Язык UML предназначен для решения следующих задач: 1. Предоставить в распоряжение пользователей легко воспринимаемый и выразительный язык визуального моделирования, специально предназначенный для разработки и документирования моделей сложных
Назначение книги
Назначение книги Данная книга не является заменой справочников и различных руководств по операционной системе UNIX. Более того, сведения, представленные в книге, подчас трудно найти в документации, поставляемой с операционной системой. Эти издания насыщены практическими
12.2 Назначение DNS
12.2 Назначение DNS Система имен доменов (Domain Name System — DNS) обеспечивает более эффективный способ согласования имен и адресов Интернета. База данных DNS обеспечивает автоматизированную службу преобразования имен в адреса. Эта система успешно работает, и многие организации,
15.1.1 Назначение NFS
15.1.1 Назначение NFS Компания Sun разработала сетевую файловую систему (Network File System — NFS) для поддержки разделения ресурсов служб рабочих станций Unix в локальных сетях. NFS делает удаленный каталог с файлами частью локальной структуры каталогов — конечные пользователи и
15.7.1 Назначение rpcbind
15.7.1 Назначение rpcbind Программа rpcbind основана на тех же принципах, что и portmapper. При инициализации программы RPC ей выделяется один или несколько динамически назначенных адресов для транспорта. Программа регистрирует полученные адреса в rpcbind, через которую они становятся
22.8.1 Назначение маршрутизаторов
22.8.1 Назначение маршрутизаторов Каждый маршрутизатор предоставляет хостам следующие сведения:? Свой адрес? Список всех адресных префиксов, используемых связью? Конкретный префикс, который должен использоваться хостом для создания своего адреса? Предполагаемое
Назначение материалов
Назначение материалов Чтобы сделать тонированные изображения более правдоподобными, можно придать поверхностям объектов оптические свойства различных материалов. Материалы могут быть как реальными, так и не существующими в природе; в первом случае подбирают
Назначение
Назначение Электронные таблицы – это программа для автоматизации расчетов, а также для структурированного представления и обработки данных, составления их баз, построения диаграмм и многого другого. Все результаты работы могут быть выведены на печать или
Назначение
Назначение Назначение программы Outlook можно понять из названия, если перевести его с английского, – «вид, кругозор, перспектива». Действительно, эта небольшая по сравнению с другими служебная программа автоматизирует множество рутинных операций и действительно
1. Пустые значения (Empty-значения)
1. Пустые значения (Empty-значения) Пустое значение – это просто одно из множества возможных значений какого-то вполне определенного типа данных.Перечислим наиболее «естественные», непосредственные пустые значения (т. е. пустые значения, которые мы могли бы выделить
2. Неопределенные значения ( Null-значения)
2. Неопределенные значения (Null-значения) Слово Null используется для обозначения неопределенных значений в базах данных.Чтобы лучше понять, какие значения понимаются под неопределенными, рассмотрим таблицу, являющуюся фрагментом базы данных: Итак, неопределенное
Назначение материалов
Назначение материалов Чтобы сделать тонированные изображения более правдоподобными, можно придать поверхностям объектов оптические свойства различных материалов. Материалы могут быть как реальными, так и не существующими в природе; в первом случае подбирают
Назначение программы
Назначение программы Основное назначение Sound Forge 9.0 – редактирование цифрового звука. С помощью этой программы можно обрабатывать фонограммы или звуковые дорожки фильмов практически всеми существующими способами.• Первоначальная запись и оцифровка звука с различных