Тесты к 5 главе Потоки. Гонка данных и другие проблемы. Мельникова Е.А., Городнюк С.А. 1. Ситуация, при которой два или более потока соперничают за обладание некоторым общим ресурсом называется: «гонка условий»; «гонка данных»; «гонка потоков»; «гонка за ресурс». 2. Что необходимо для решения проблемы «гонки данных»? необходимо, чтобы в критической секции кода одновременно мог работать только один поток, а другие потоки должны стоять в очереди, ожидая, когда поток, выполняющий критическую секцию, закончит свою работу. необходимо, чтобы в критической секции кода вообще не возникало ситуации, когда два потока конкурируют за общий ресурс. проблема «гонка данных» является тупиковой ситуацией и не имеет конкретного решения. необходимо, чтобы в критической секции кода потоки работали параллельно, чтобы не возникало конкуренции за определенный ресурс. 3. Ситуации, при которой два или более параллельно выполняемых потока конкурируют за обладание двумя или более общими ресурсами называется: Клинч; Дедлок; Смертельные объятия; Смертельный удар. 4. Для предотвращения возникновения «клинча» необходимо: Чтобы, каждая критическая секция захватывает все общие ресурсы. Чтобы, работа в критических секциях с общими ресурсами велась последовательно, а не одновременно. Возникновение «клинча» нельзя предугадать, поэтому конкретных приемов не существует. Применение мягких методов блокировки, когда блокируется только запись, но не чтение ресурса. 5. Метод блокировки EnterWriteLock() применяется в ситуации: Если при выполнении этого метода есть очередь потоков со статусом Write, то поток становится в конец этой очереди. Если при выполнении этого метода есть очередь потоков со статусом Write, то поток становится в очередь потоков со статусом Read. Если при выполнении этого метода есть очередь потоков со статусом Write, то поток становится в очередь потоков со статусом Upgradeable. Данный метод не применяется при выше описанных ситуациях. 6. Для разблокирования критической секции применяют три соответствующих метода: ExitReadLock(), ExitWriteLock(), ExitUpgradeableReadLock(). ExitEnterReadLock(), ExitLock(), ExitUpgradeableReadLock(). ExitReadLock(), ExitEnterWriteLock(), ExitUpgradeableReadLock(). ExitReadLock(), ExitWriteLock(), ExitEnterReadLock(). 7. Метод Pulse имеет следующий синтаксис: public static void Pulse(object obj); protected static void Pulse(object obj); private static void Pulse(object obj); public static Pulse(object obj); 8. Какие две важные особенности есть у семафоров: Семафоры более строгие, чем обычные способы блокировки. У них нет синхронизирующего объекта, и они никакой поток не допускают в критическую секцию, когда она занята. Семафоры более мягкие, чем обычные способы блокировки. Они позволяют войти в критическую секцию нескольким потокам. Семафоры более мягкие, чем обычные способы блокировки. У них есть синхронизирующий объект, и они допускают поток в критическую секцию, когда она занята. Семафоры более строгие, чем обычные способы блокировки. Они не позволяют войти в критическую секцию нескольким потокам.