Необходимость в синхронизации потоков
Необходимость в синхронизации потоков
В главе 7 были продемонстрированы методы создания рабочих потоков и управления ими в условиях, когда каждый рабочий поток обращался к собственным ресурсам. В приведенных в главе 7 примерах каждый поток обрабатывает отдельный файл или отдельную область памяти, но даже и в этом случае возникает необходимость в простейшей синхронизации во время создания и завершения потоков. Так, в программе grepMT все рабочие потоки выполняются независимо друг от друга, но главный поток должен ожидать завершения рабочих потоков, прежде чем вывести сгенерированные ими результаты. Заметьте, что главный поток разделяет общую память с рабочими потоками, но структура программы гарантирует, что главный поток не получит доступа к памяти до тех пор, пока рабочий поток не завершит своего выполнения.
Программа sortMT несколько сложнее, поскольку рабочие потоки должны синхронизировать свое выполнение, ожидая завершения смежных потоков, и не могут быть запущены до тех пор, пока главный поток не создаст все рабочие потоки. Как и в случае программы grepMT, синхронизация достигается за счет ожидания завершения одного или нескольких потоков.
Однако во многих случаях требуется, чтобы выполнение двух и более потоков могло координироваться на протяжении всего времени жизни каждой из них. Например, несколько потоков могут обращаться к одной и той же переменной или набору переменных, и тогда возникает вопрос о взаимоисключающем доступе. В других случаях поток не может продолжать выполнение до тех пор, пока другой поток не достигнет определенного этапа выполнения. Каким образом программист может получить уверенность в том, что, например, два или более потоков не попытаются одновременно изменить данные, хранящиеся в глобальной памяти, такие, например, как статистические данные о производительности? Как, далее, программист может добиться того, чтобы поток не предпринимал попыток удаления элемента из очереди, если очередь не содержит хотя (бы одного элемента?
Несколько примеров иллюстрируют ситуации, которые могут приводить к нарушению условий безопасного выполнения нескольких потоков. (Код считается безопасным в этом смысле, если он может выполняться одновременно несколькими потоками без каких-либо нежелательных последствий.) Условия безопасного выполнения потоков обсуждаются далее в этой и последующих главах.
На рис. 8.1 показано, что может случиться, когда две несинхронизированные потоки разделяют общий ресурс, например ячейку памяти. Оба потока увеличивают значение переменной N на единицу, но в силу специфики очередности, в которой могут выполняться потоки, окончательное значение N равно 5, тогда как правильным значением является 6. Заметьте, что представленный здесь частный результат не обладает ни повторяемостью, ни предсказуемостью; другая очередность выполнения потоков могла бы привести к правильному результату. В SMP-системах эта проблема еще более усугубляется.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Объекты синхронизации потоков
Объекты синхронизации потоков До сих пор нами были обсуждены только два механизма, обеспечивающие синхронизацию процессов и потоков друг с другом:1. Поток, выполняющийся в контексте одного процесса, может дожидаться завершения другого процесса с использованием функции
ГЛАВА 10 Усовершенствованные методы синхронизации потоков
ГЛАВА 10 Усовершенствованные методы синхронизации потоков В предыдущей главе были описаны проблемы производительности, возникающие в Windows, и способы их преодоления в реалистичных ситуациях. В главе 8 обсуждался ряд простых задач, требующих привлечения объектов
Стеки потоков и допустимые количества потоков
Стеки потоков и допустимые количества потоков Следует сделать еще два предостережения. Во-первых, подумайте о размере стека, который по умолчанию составляет 1 Мбайт. В большинстве случаев этого будет вполне достаточно, но если существуют какие-либо сомнения на сей счет,
Необходимость в 64-битовой адресации
Необходимость в 64-битовой адресации Возможности доступа к большим адресным пространствам требуются многим приложениям. Можно было бы привести множество примеров, аналогичных тем, которые перечислены ниже.• Приложения для обработки изображений. Системы, использующие
Дополнительно о синхронизации
Дополнительно о синхронизации Мы уже обсудили:• мутексы;• семафоры;• барьеры.Давайте теперь завершим нашу дискуссию о синхронизации, обсудив следующее:• блокировки чтения/записи (reader/writer locks);• ждущие блокировки (sleepons);• условные переменные (condition
5.20 Необходимость следующего поколения протокола IP
5.20 Необходимость следующего поколения протокола IP Внедрение бесклассовых адресов суперсетей и бесклассовой маршрутизации стало последней точкой в совершенствовании и использовании текущей схемы адресации протокола IP.В начале разработки адресов IP никто не мог
11.4 Необходимость DHCP
11.4 Необходимость DHCP Область использования BOOTP ограничивает действия администратора, которому необходимо автоматизировать конфигурирование IP-адресов и не вводить вручную длинные списки аппаратных адресов вместе с соответствующими им IP-адресами. Администратору
13.9.1 Сигнал синхронизации
13.9.1 Сигнал синхронизации Для некоторых функций (например, Interrupt Process) включение команды в общий поток данных не приводит к нужным результатам. Когда реальный терминал посылает сигнал прерывания, хост операционной системы получает этот сигнал сразу и быстро останавливает
22.10.1 Необходимость изменений
22.10.1 Необходимость изменений Провайдерам IPv6 необходим для более эффективной магистральной маршрутизации и увеличения количества своих подписчиков. Однако зачем переходить на версию 6 независимым организациям, у которых прекрасно работают сети на старой системе
Центр синхронизации
Центр синхронизации С помощью этого компонента вы можете синхронизировать данные своего мобильного телефона или любого другого устройства, подключенного к компьютеру, с данными на компьютере. Кроме того, аналогичные действия можно выполнять и по отношению к данным,
Необходимость установки плагинов
Необходимость установки плагинов Слабым местом является необходимость скачивания плагинов для корректной работы с сайтом вашего интернет-магазина. Девять из десяти человек просто уйдут с вашего сайта, если поймут, что им нужно совершить какие-то дополнительные
Необходимость управления исходными текстами
Необходимость управления исходными текстами Управление исходными текстами является маленькой частью большой и сложной науки управления созданием программного обеспечения. Тем не менее, это одна из важнейших частей с точки зрения автоматизации, поскольку маленький и,
Результаты синхронизации потоков
Результаты синхронизации потоков В табл. А.4 приведены значения времени, нужного одному или нескольким потокам для увеличения счетчика в разделяемой памяти с использованием различных средств синхронизации в Solaris 2.6, а на рис. А.3 показан график этих значений. Каждый поток
Проблема конкуренции и роль синхронизации потоков
Проблема конкуренции и роль синхронизации потоков Одним из множества "преимуществ" (читайте источников проблем) многопоточного программирования является то, что вы имеете очень узкие возможности контроля в отношении использования потоков операционной системой и
Необходимость автоматических методов
Необходимость автоматических методов Хорошая ОО-среда должна предлагать механизм автоматического управления памятью, который обнаруживал бы и утилизировал недостижимые объекты, позволяя разработчикам приложений концентрироваться на своей работе - разработке
Необходимость параметризованных классов
Необходимость параметризованных классов Универсализация уже рассматривалась в данной книге, но не применялась для классов. Мы столкнулись с ней при обзоре традиционных подходов к повторному использованию и при изучении математической модели класса - АТД, где была