Программирование на языке Ruby
Шрифт:
Ясно, что каждый поток увеличивает на 1 то значение,
И это лишь самая простая из проблем, возникающих в связи с синхронизацией. Для решения более сложных приходится прилагать серьезные усилия — это предмет изучения специалистами в области теоретической информатики и математики.
13.2.1. Синхронизация с помощью критических секций
Простейший способ синхронизации дают критические секции. Когда поток входит в критическую секцию программы, гарантируется, что никакой другой поток не войдет в нее, пока первый не выйдет.
Если акцессору
Теперь последовательность выполнения изменилась; взгляните, в каком порядке работают потоки
Возможны такие комбинации операций с потоками, при которых поток планируется даже тогда, когда какой-то другой поток находится в критической секции.
Простейший случай — вновь созданный поток начинает исполнение немедленно вне зависимости от того, занимает какой-то другой поток критическую секцию или нет. Поэтому описанную технику лучше применять только в самых простых ситуациях.
13.2.2. Синхронизация доступа к ресурсам (mutex.rb)
В качестве примера рассмотрим задачу индексирования Web-сайтов. Мы извлекаем слова из многочисленных страниц в Сети и сохраняем их в хэше. Ключом является само слово, а значением — строка, идентифицирующая документ и номер строки в этом документе.
Постановка задачи и так достаточно груба. Но мы огрубим ее еще больше, введя следующие упрощающие допущения:
• будем представлять удаленные документы в виде строк;
• ограничимся всего тремя строками (они будут «зашиты» в код);
• сетевые задержки будем моделировать «засыпанием» на случайный промежуток времени.
Взгляните на программу в листинге 13.1. Она даже не печатает получаемые данные целиком, а выводит лишь счетчик слов (не уникальный). Каждый раз при чтении или обновлении хэша мы вызываем метод
MARVEL: Небесный Кузнец
Фантастика:
эпическая фантастика
фэнтези
рейтинг книги
Рыцарь
5. Мост и Меч
Любовные романы:
любовно-фантастические романы
рейтинг книги
Миф
Фантастика:
научная фантастика
рейтинг книги
Опыты (Том 1)
Научно-образовательная:
философия
рейтинг книги
Шерлок Холмс. Большой сборник
Детективы:
классические детективы
рейтинг книги
Высоцкий
829. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
рейтинг книги
Я снова князь. Книга XXIII
23. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
рейтинг книги
Отморозок 1
1. Отморозок
Фантастика:
попаданцы
рейтинг книги
Сталин
1190. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
рейтинг книги
Варяжская сталь: Герой. Язычник. Княжья Русь
Варяг
Фантастика:
боевая фантастика
попаданцы
альтернативная история
рейтинг книги
Тунгусский Робинзон
Детективы:
боевики
крутой детектив
рейтинг книги
Методы статистического анализа исторических текстов (часть 2)
Научно-образовательная:
история
рейтинг книги