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