Язык программирования Perl
Шрифт:
Действие, выполняемое методом join, называется "присоединение нити" или "объединение потоков". Как это происходит, показано на рис. 16.2.
Рис. 16.2.Присоединение нити с помощью join
Каждой нити присваивается числовой идентификатор (Thread Identifier, TID), который можно получить с помощью метода tid.
Сообщения, выводимые при выполнении этой программы, подтверждают независимое выполнение нитей и основной программы:
Параллельно выполняющийся поток можно "отсоединить", игнорируя его значение: это делается методом $thread->detach, после выполнения которого присоединить нить будет невозможно.
Нити, выполняющиеся параллельно с основной программой, могут иметь доступ к общим переменным: скалярам, массивам и хэшам. Это делается с помощью явного указания для разделяемой переменной атрибута shared. Помеченная этим атрибутом переменная будет доступна для чтения и изменения в параллельном потоке. Для остальных переменных при отсоединении нити создаются локальные для каждого потока копии. Это демонстрируется таким примитивным примером:
Чтобы предотвратить в одной нити изменение другими нитями значения разделяемой переменной, эту переменную нужно заблокировать при помощи функции lock. Разблокирование переменной происходит не с помощью функции, а при выходе из блока, в котором она была заблокирована. Это делается таким образом:
Нити могут обмениваться между собой данными. Например, с помощью стандартного модуля Thread::Queue организуется очередь для синхронизированной передачи данных из одной нити в другую. Пользоваться такой очередью гораздо проще, чем рассмотренными ранее программными каналами. Небольшой пример показывает, как помещать скалярные величины в очередь методом enqueue и извлекать из нее методом dequeue. Метод pending возвращает число оставшихся в очереди элементов, поэтому может использоваться для окончания цикла чтения из очереди:
Автоматическая синхронизация доступа к очереди гарантирует очередность записи в очередь и чтение из нее, что видно из выполнения этого примера:
Солнечный корт
4. Все ради игры
Фантастика:
зарубежная фантастика
рейтинг книги
Дважды одарённый. Том X
10. Дважды одаренный
Фантастика:
аниме
фэнтези
попаданцы
рейтинг книги
"Фантастика 2024-68". Компиляция. Книги 1-22
Фантастика 2024. Компиляция
Фантастика:
фэнтези
боевая фантастика
космическая фантастика
попаданцы
альтернативная история
рпг
рейтинг книги
Всадник на белом коне. Трилогия
Всадник на белом коне
Фантастика:
научная фантастика
космическая фантастика
рейтинг книги
Соль земли
Проза:
советская классическая проза
рейтинг книги
Secretum
Детективы:
исторические детективы
рейтинг книги
Скриптер
Фантастика:
героическая фантастика
рейтинг книги
Возрождённое завтра
Любовные романы:
любовно-фантастические романы
рейтинг книги
Перекресток судеб
6. Нед
Фантастика:
фэнтези
рейтинг книги
ТОЛКОВАНИЕ БЛАЖЕННОГО ФЕОФИЛАКТА АРХИЕПИСКОПА БОЛГАРСКОГО на КНИГИ НОВОГО ЗАВЕТА
Религия и эзотерика:
православие
рейтинг книги