glava_5

advertisement
Глава 5
Потоки. Гонка данных и другие проблемы
1) Как еще называют гонку условий (Condition Race)?
А. Data Race
Б. Time Race
В. Time Sprint
Г. Data Sprint
2) Из-за какого ресурса чего чаще всего возникает соперничество?
- Оперативная память
- Внешняя память
- Подключенное устройство
- Ничего из выше перечисленного
3) Оператора lock – это
А. Простейший механизм блокировки
Б. Критический оператор
В. Оператор расширения.
Г. Допускающий оператор
4) Два или более параллельно выполняемых потока конкурируют за обладание двумя или
более общими ресурсами, как называется данная ситуация?
А. Клинч
Б. Дедлок
В. Смертельные объятия
Г. Стопор
5) Укажите верные способы избегания клинча:
А. Каждая критическая секция захватывает все общие ресурсы. Это означает, что вход в каждую
критическую секцию закрывается одним ключом. Это гарантирует, что в каждый момент времени
исполняться будет только одна критическая секция и клинча не будет. Недостатком такого подхода
является увеличение общего времени ожидания. Во многих ситуациях неразумно, когда все ресурсы
принадлежат одному владельцу, а он не пользуется ими одновременно.
Б. Если в критических секциях работа с ресурсами ведется последовательно, а не одновременно, то
ресурс следует освобождать, как только работа с ним закончена. Это общее правило работы с
разделяемыми ресурсами. Во многих случаях оно позволяет избавиться от клинча. Оно не всегда
работает, поскольку часто необходимы одновременно несколько ресурсов в каждой из критических
секций.
В. Клинч не возникает, если есть только одна критическая секция. В нашем примере, клинч не будет
возникать, если оба потока будут вызывать один и тот же метод, а не два разных метода. По сути, это
также захват всех ресурсов, означающий, ожидание в очереди всех потоков, пока не отработает поток,
вошедший в критическую секцию.
Г. Применение мягких методов блокировки, когда блокируется только запись, но не чтение ресурса.
Блокировка, использующая оператор lock, блокирует любую работу с ресурсом. В то же время, если
ресурс используется только для чтения, то возможно его одновременное использование. В этом случае
гонка данных не приводит к ошибкам, а мягкие методы блокировки, которые рассмотрим чуть ниже,
позволяют избежать клинча.
6) Для каждой группы класс ReaderWriterLockSlim предлагает свой метод блокировки,
выберите верные:
А. EnterReadLock(). Если при выполнении этого метода есть очередь потоков со статусом Write, то
поток становится в очередь потоков со статусом Read. Потоки из этой очереди смогут начать
выполняться, только когда нет ждущих «писателей». Если очередь состоит только из потоков со
статусом Upgradeable, то поток входит в критическую секцию, поскольку разрешается в критической
секции одновременное присутствие потоков со статусом Read и одного потока со статусом
Upgradeable.
Б. EnterWriteLock(). Если при выполнении этого метода есть очередь потоков со статусом Write, то
поток становится в конец этой очереди. Если же очереди нет, то поток дожидается завершения работы
потоков, находящихся в критической секции. После чего поток входит в критическую секцию и
единолично работает с ресурсом.
В. EnterUpgradeableReadLock(). Если при выполнении этого метода есть очередь потоков со статусом
Write, то поток становится в очередь потоков со статусом Upgradeable. Если последняя очередь пуста,
то поток будет первым в этой очереди. Первый поток из этой очереди может начать свою работу, когда
очередь потоков со статусом Write пуста.
Г. EnterDowngradeableReadLock(). Если при выполнении этого метода нет очереди потоков со статусом
Write, то поток становится в очередь потоков со статусом Downgradeable. Если последняя очередь
пуста, то поток будет первым в этой очереди. Первый поток из этой очереди может начать свою
работу, когда очередь потоков со статусом Write пуста.
7) Для разблокирования критической секции в классе ReaderWriterLockSlim применяются
соответствующие методы:
А. ExitReadLock().
Б. ExitWriteLock().
В. ExitUpgradeableReadLock().
Г. ExitDowngradeableReadLock().
8) Для более мягкой схемы блокировки в классе ReaderWriterLockSlim используют:
А.bool TryEnterReadLock(int wait).
Б.bool TryEnterWriteLock(int wait).
В.bool EnterUpgradeableReadLock(int wait).
Г.bool EnterDowngradeableReadLock(int wait).
Download