Программирование на языке Ruby
Шрифт:
Ясно, что каждый поток увеличивает на 1 то значение,
И это лишь самая простая из проблем, возникающих в связи с синхронизацией. Для решения более сложных приходится прилагать серьезные усилия — это предмет изучения специалистами в области теоретической информатики и математики.
13.2.1. Синхронизация с помощью критических секций
Простейший способ синхронизации дают критические секции. Когда поток входит в критическую секцию программы, гарантируется, что никакой другой поток не войдет в нее, пока первый не выйдет.
Если акцессору
Теперь последовательность выполнения изменилась; взгляните, в каком порядке работают потоки
Возможны такие комбинации операций с потоками, при которых поток планируется даже тогда, когда какой-то другой поток находится в критической секции.
Простейший случай — вновь созданный поток начинает исполнение немедленно вне зависимости от того, занимает какой-то другой поток критическую секцию или нет. Поэтому описанную технику лучше применять только в самых простых ситуациях.
13.2.2. Синхронизация доступа к ресурсам (mutex.rb)
В качестве примера рассмотрим задачу индексирования Web-сайтов. Мы извлекаем слова из многочисленных страниц в Сети и сохраняем их в хэше. Ключом является само слово, а значением — строка, идентифицирующая документ и номер строки в этом документе.
Постановка задачи и так достаточно груба. Но мы огрубим ее еще больше, введя следующие упрощающие допущения:
• будем представлять удаленные документы в виде строк;
• ограничимся всего тремя строками (они будут «зашиты» в код);
• сетевые задержки будем моделировать «засыпанием» на случайный промежуток времени.
Взгляните на программу в листинге 13.1. Она даже не печатает получаемые данные целиком, а выводит лишь счетчик слов (не уникальный). Каждый раз при чтении или обновлении хэша мы вызываем метод
Фурцева
1303. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
рейтинг книги
Преисподняя
54. Книга-загадка, книга-бестселлер
Фантастика:
научная фантастика
рейтинг книги
Палач
Фантастика:
ужасы и мистика
рейтинг книги
Имперец. Том 1 и Том 2
1. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
рейтинг книги
Первый среди равных
1. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги
Жажда ночи
3. В ритме танго
Любовные романы:
любовно-фантастические романы
эро литература
рейтинг книги
Билет на ладью Харона
2. Дырка для ордена
Фантастика:
альтернативная история
рейтинг книги
Понюшка (Snuff)
39. Плоский мир
Фантастика:
юмористическая фантастика
рейтинг книги
Монстр из прошлого тысячелетия
5. Соприкосновение миров
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги
Уго Чавес
1432. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
рейтинг книги
Неучтенный элемент. Том 9
9. Антимаг. Вне системы
Фантастика:
фэнтези
рейтинг книги
Первопроходцы
638. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
рейтинг книги
Итальянский фашизм
Научно-образовательная:
история
политика
рейтинг книги