voprosy_k_5_glave._muromcevamuhortovax

advertisement
Вопросы к главе 5 «Потоки. Гонка данных и другие проблемы»
1. Что означает выражение «гонка условий»?
a. Под «гонкой условий» понимают ситуацию, когда параллельно
работают два потока и их результат всегда записывается в ячейки
одновременно.
b. Под «гонкой условий» понимают ситуацию, когда два или более
потока соперничают за обладание некоторым общим ресурсом
(например, оперативная память или внешняя память).
c. Это иное название «гонки данных».
d. Это понятие, обратное «гонке данных».
2. Дайте определение, что такое «блокировка» потоков?
a. Это схема работы, при которой в критической секции кода
одновременно работает несколько потоков с высоким приоритетом,
другие потоки с низким приоритетом блокируются и ждут своей
очереди, когда потоки с высоким приоритетом, выполняющие
критическую ситуацию, закончат свою работу.
b. Это схема работы потоков, при которой невозможно разрешение
ситуации «гонки данных».
c. Это схема работы, при которой в критической секции кода
одновременно может работать один поток, другие потоки должны
стоять в очереди, ожидая, когда поток, выполняющий критическую
секцию, закончит свою работу.
После чего начать выполнять
критическую секцию сможет другой поток.
d. Все варианты ответов неверны.
3. В чем суть проблемы «дедлок»?
a. Дедлок возникает в ситуации, когда два или более параллельно
выполняемых потока конкурируют за обладание двумя или более
общими ресурсами. Каждый из потоков успевает захватить один из
общих ресурсов. Для окончания работы каждому потоку необходимы
другие ресурсы, захваченные другими потоками. В результате, никто
из потоков не может завершить свою работу, все стоят в очередях,
которые не двигаются. Работа замирает.
b. Дедлок возникает в ситуации, когда два или более параллельно
выполняемых потока конкурируют за обладание одним ресурсом.
Только один из потоков успевает первым захватить общий ресурс. Для
других потоков ресурс блокируется. Но для окончания работы этим
потокам необходим данный ресурс, захваченный одним потоком. В
результате, потоки, для которых блокируется ресурс, не могут
завершить свою работу, они стоит в очередях, которая не двигаются.
Работа замирает.
c. Это простейший механизм блокировки, основанный на
использовании оператора языка С# - оператора deadlock.
d. Пусть поток P1, входя в критическую секцию, захватывает ресурс
R1, блокируя его для использования потоком P2. Аналогично, работая
параллельно, поток P2, входя в критическую секцию, захватывает
ресурс R2, блокируя его для использования потоком P1. Потоку P1 в
какой-то момент работы в критической секции становится
необходимым ресурс R2, но это ресурс заблокирован и поток
становится в очередь, прерывая свое выполнение. Симметричная
ситуация возникает с потоком P2.
4. Выберите из вариантов ответов, какие существуют пути спасения от
ситуации клинча?
a. Если в критических секциях работа с ресурсами ведется
последовательно, а не одновременно, то ресурс следует освобождать,
как только работа с ним закончена.
b. Клинч не возникает, если есть несколько критических ситуаций и в
каждой из них необходимы одновременно несколько ресурсов.
c. Применение мягких методов блокировки, когда блокируется только
запись, но не чтение ресурса. Блокировка, использующая оператор
lock, блокирует любую работу с ресурсом. В то же время, если ресурс
используется только для чтения, то возможно его одновременное
использование.
d. В основном потоке можно использовать другую форму оператора
Join для организации ожидания - bool Join( int t), позволяющая ожидать
завершения работы запущенного потока в течение времени, заданного
параметром t. Если поток нормально завершается, то функция Join
возвращает значение true. Если же истекло время, отпущенное на
ожидание, то функция возвращает значение false.
e. Привести ситуацию клинча к ситуации livelock.
5. Поясните следующий фрагмент кода:
Monitor.Enter(locker)
try
{<критическая секция>}
finally { Monitor.Exit(locker)}
a. Статический метод Enter класса Monitor закрывает критическую
секцию на проверку ошибок с помощью try-блока. Все потоки,
пытающиеся войти в критическую секцию, закрытую ключом locker,
будут выстраиваться в очередь, ожидая, пока секция будет
возобновлена после проверки. При завершении try-блока выполняется
блок finally, снимающий блокировку.
b. Пример разрешения ситуации смертельных объятий и гонки
условий.
c. Некоторые потоки «не любят» долгое стояние в очереди. В таких
ситуациях они предпочитают вообще отказаться (Monitor.Exit) от
выполнения задачи или попытаться прийти в другой раз, когда,
возможно, очереди не будет. Таким потокам класс Monitor
предоставляет метод Enter, описанный в данной конструкции.
d. Статический метод Enter класса Monitor закрывает критическую
секцию, погруженную в try-блок, ссылочным объектом locker. Все
остальные потоки, пытающиеся войти в критическую секцию,
закрытую ключом locker, будут выстраиваться в очередь, ожидая, пока
секция не будет открыта. При любом завершении try-блока
выполняется блок finally, снимающий блокировку.
6. Какие методы существуют у класса Monitor?
a.Wait
b. Pulse
c. AllPulse
d.TryEnter
e. Lock
f. PulseAll
7. Что вы можете сказать о классе SemaphoreSlim? Выберите правильные
ответы.
a. Этот класс задает реализацию семафоров – один из способов
блокировки критических секций.
b.У класса SemaphoreSloim восемь конструкторов и им можно
передавать от одного до четырех параметров. Первым параметром
всегда идет метод, связываемый с задачей, остальные параметры
позволяют задать дополнительные параметры
c. У класса SemaphoreSlim есть два основных метода – Wait и Release.
d. У класса SemaphoreSlim есть два основных метода – Enter и Exit.
8. Назовите особенности семафоров:
a. Семафоры более строгие, чем обычные способы блокировки. У них
нет синхронизирующего объекта, и они никакой поток не допускают в
критическую секцию, когда она занята.
b. Семафоры более мягкие, чем обычные способы блокировки. Они
позволяют войти в критическую секцию нескольким потокам.
c. Семафоры никогда не используются при организации работы с
сервером, так как их использование увеличивает нагрузку на сервер не ограничивается число клиентов, одновременно работающих с
сервером.
d. Семафоры ничем не отличаются от других механизмов блокировки
критической секции, кроме как количеством методов главного класса.
Download