Программирование на языке Ruby
Шрифт:
Не все в Ruby безопасно относительно потоков, но имеются методы синхронизации, которые позволяют контролировать доступ к переменным и ресурсам, защищать критические секции программы и избегать тупиковых ситуаций. Мы рассмотрим их в этой главе и проиллюстрируем на примерах.
13.1. Создание потоков и манипулирование ими
К числу основных операций над потоками относятся создание потока, передача ему входной информации и получение результатов, останов потока и т.д. Можно получить список запущенных потоков, опросить состояние потока и выполнить
Ниже представлен обзор основных операций.
13.1.1. Создание потоков
Создать поток просто: достаточно вызвать метод new и присоединить блок, который будет исполняться в потоке.
Возвращаемое значение — объект типа
А если нужно передать потоку параметры? Достаточно передать их методу
Параметры блока, являющиеся ссылками на существующие переменные, практически неотличимы от самих переменных. Поэтому, например, переменная
Поток может также обращаться к переменным из той же области видимости, в которой был создан. Ясно, что без синхронизации это может стать источником проблем. Главный и любой другой поток могут изменять такую переменную независимо друг от друга, и результаты подобных действий непредсказуемы.
У метода
13.1.2. Доступ к локальным переменным потока
Мы
Для этой цели предусмотрен специальный механизм. Если объект
Существует также метод
Внутри потока к таким данным тоже следует обращаться, как к хэшу. Метод
Отметим, что эти данные доступны другим потокам даже после того, их владелец завершил работу (как в данном случае).
Помимо символа (см. выше), для идентификации локальной переменной потока можно употреблять и строки.
He путайте эти специальные имена с настоящими локальными переменными. В следующем фрагменте разница видна более отчетливо:
И еще отметим, что ссылку на объект (на настоящую локальную переменную) внутри потока можно использовать для сокращенной записи. Это справедливо, если вы сохраняете одну и ту же ссылку, а не создаете новую.
MARVEL: Небесный Кузнец
Фантастика:
эпическая фантастика
фэнтези
рейтинг книги
Рыцарь
5. Мост и Меч
Любовные романы:
любовно-фантастические романы
рейтинг книги
Миф
Фантастика:
научная фантастика
рейтинг книги
Опыты (Том 1)
Научно-образовательная:
философия
рейтинг книги
Шерлок Холмс. Большой сборник
Детективы:
классические детективы
рейтинг книги
Высоцкий
829. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
рейтинг книги
Я снова князь. Книга XXIII
23. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
рейтинг книги
Отморозок 1
1. Отморозок
Фантастика:
попаданцы
рейтинг книги
Сталин
1190. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
рейтинг книги
Варяжская сталь: Герой. Язычник. Княжья Русь
Варяг
Фантастика:
боевая фантастика
попаданцы
альтернативная история
рейтинг книги
Тунгусский Робинзон
Детективы:
боевики
крутой детектив
рейтинг книги
Методы статистического анализа исторических текстов (часть 2)
Научно-образовательная:
история
рейтинг книги