игра брюс 2048
Главная / Программирование / Параллельные вычисления и многопоточное программирование / Тест 5

Параллельные вычисления и многопоточное программирование - тест 5

Упражнение 1:
Номер 1
Что понимается под гонкой данных (гонкой условий):

Ответ:

 (1) чистка файлов от данных 

 (2) упрощение условий в if-операторах 

 (3) параллельное использование в потоках общих ресурсов 

 (4) замена литеральных констант именованными константами 


Номер 2
Что понимается под общими ресурсами потоков, участвующими в гонке:

Ответ:

 (1) методы, передаваемые потокам 

 (2) общие переменные (оперативная память) 

 (3) файлы 

 (4) устройства – консоль, принтер 


Номер 3
При переходе от потоко - опасного класса Account  к потоко - безопасному классу AccountSafe  какое решение следует выбрать, следуя хорошему стилю программирования?

Ответ:

 (1) внести изменения в класс Account 

 (2) создать новый класс Account_Safe, не связанный с классом Account 

 (3) изменить логику работы клиентов с банковским счетом 

 (4) создать класс Account_Safe как наследника класса Account 


Упражнение 2:
Номер 1
Какие утверждения справедливы по отношению к критическим секциям:

Ответ:

 (1) у метода может быть только одна критическая секция 

 (2) разные потоки могут входить в одну и ту же критическую секцию 

 (3) разные потоки могут входить в разные критические секции, закрываемые одним и тем же ключом 


Номер 2
Какие утверждения справедливы по отношению к критической секции?

Ответ:

 (1) критическая секция – это фрагмент метода, размеры которого превосходят допустимый размер 

 (2) раздел класса, в котором объявляются общие ресурсы 

 (3) фрагмент метода, в котором выполняется работа с общими ресурсами 


Номер 3
Работая в цикле, Поток_1 выполняет код: N = rnd.Next(0,2), а Поток_2 выполняет параллельно код: if(N > 0) Sum = 1000  else Sum = 0; (Переменные объявлены надлежащим образом, блокировки не предусмотрены)  Какие результаты гарантируются?

Ответ:

 (1) если N = 1, то Sum = 1000 

 (2) если N = 0, то Sum = 0 

 (3) если N = 0, то Sum = 1000 

 (4) если N = 1, то Sum = 0 

 (5) ни один из результатов не гарантируется. Возможны все четыре случая 


Упражнение 3:
Номер 1
Каково назначение оператора lock?

Ответ:

 (1) закрыть общий ресурс потоков для чтения 

 (2) закрыть общий ресурс потоков для записи 

 (3) закрыть критическую секцию, позволяя работать в ней только одному потоку 


Номер 2
Критическая секция может быть закрыта оператором lock(Locker), где объект Locker играет роль замка на входе в секцию. Каковы утверждения справедливы для объекта Locker?

Ответ:

 (1) у каждой критической секции должен быть свой замок (свой объект Locker

 (2) если две критические секции закрыты одним замком, то потокам, желающим войти в эти секции, доступ открыт 

 (3) если критические секции закрыты одним замком, то потокам, желающим войти в эти секции, доступ закрыт, если некоторый другой поток уже работает в критической секции, закрытой этим же замком. Ключ от замка может быть только у одного потока 


Номер 3
Какие утверждения справедливы относительно блокировки, осуществляемой оператором lock?

Ответ:

 (1) блокируется вход для всех потоков, пытающихся войти в критические секции, закрытые одним и тем же замком (объектом Locker), если в одной из таких секций уже выполняется поток 

 (2) завершая работу в критической секции, поток открывает замок, позволяя потоку, первому стоящему в очереди войти в критическую секцию, закрыв за собой замок 

 (3) блокируется вход только для потоков, осуществляющих запись, - изменение ресурса. Чтение ресурса разрешается всем потокам, несмотря на блокировку 


Упражнение 4:
Номер 1
Какие утверждения справедливы для ситуации клинча?

Ответ:

 (1) клинч не может возникнуть, если у потоков есть только один общий ресурс 

 (2) клинч не может возникнуть, если все потоки выполняют один и тот же метод 

 (3) для возникновения клинча необходимо выполнить оператор clinch 


Номер 2
Клинч возникает, если:

Ответ:

 (1) несколько потоков пытаются параллельно выполнить один и тот же метод 

 (2) несколько потоков взаимно блокируют общие ресурсы, необходимые каждому из потоков для продолжения работы 

 (3) несколько потоков используют общие ресурсы 


Номер 3
Как справиться с ситуацией клинча?

Ответ:

 (1) захватывать в критической секции все общие ресурсы 

 (2) захватывать в критической секции только один ресурс 

 (3) позволять заблокированным потокам выход из режима ожидания по истечении заданного времени 

 (4) при блокировках клинч неизбежен, справиться с ним невозможно 


Упражнение 5:
Номер 1
Укажите высказывания, истинные для класса ReaderWriterLockSlim:

Ответ:

 (1) методы блокировки TryEnter позволяют избежать ситуации клинча 

 (2) если при выполнении метода EnterReadLock() есть очередь потоков со статусом Write, то поток становится в конец этой очереди. Если же очереди нет, то поток дожидается завершения работы потоков, находящихся в критической секции. После чего поток входит в критическую секцию и единолично работает с ресурсом; 

 (3) методы блокировки класса ReaderWriterLockSlim позволяют обеспечить мягкую блокировку ресурсов 


Номер 2
Сколько методов, включающих блокировку, имеется у класса ReaderWriterLockSlim?

Ответ:

 (1)

 (2)

 (3)

 (4)


Номер 3
Что понимается под мягкой блокировкой?

Ответ:

 (1) блокировка критической секции с выдачей утешительных сообщений потокам, стоящим в очереди 

 (2) блокировка, позволяющая потокам с высоким приоритетом войти в критическую секцию 

 (3) блокировка, допускающая выполнение некоторых операций над общим ресурсом (например чтение ресурса) нескольким потокам. В то же время выполнение "опасных" операций (запись в ресурс) разрешается только одному потоку 


Упражнение 6:
Номер 1
Какие утверждения справедливы по отношению к классу Monitor?

Ответ:

 (1) методы этого класса позволяют наблюдать за поведением потоков (выполняют непрерывный мониторинг), что позволяет управлять вычислениями в критических секциях 

 (2) оператор lock языка C# реализован с использованием механизмов класса Monitor 

 (3) метод TryEnter класса Monitor позволяет справиться с ситуацией клинча 


Номер 2
Какие высказывания являются истинными по отношению к методу Wait из класса  Monitor?

Ответ:

 (1) в кооперации с методом Pulse обеспечивает взаимодействие потоков 

 (2) метод освобождает синхронизирующий объект 

 (3) метод прерывает работу потока и ставит его в специальную очередь ожидания уведомления 

 (4) для возобновления работы необходимо, чтобы другой метод, захвативший освобожденный объект синхронизации, выполнил метод Pulse 

 (5) возобновление работы потока после вызова метода Wait происходит по истечении заданного интервала времени 


Номер 3
Какие высказывания являются истинными по отношению к методу Pulse(obj)  из класса  Monitor?

Ответ:

 (1) в кооперации с методом Wait обеспечивает взаимодействие потоков 

 (2) метод освобождает синхронизирующий объект 

 (3) уведомляет очередь ожидания потоков с синхронизирующим объектом obj. В результате поток из этой очереди переходит в состояние готовность 

 (4) некорректная организация взаимодействия потоков с помощью методов Wait и Pulse может приводить к ситуации клинча 


Упражнение 7:
Номер 1
Какие утверждения справедливы для классической задачи "Обедающие философы"?

Ответ:

 (1) эта задача позволяет моделировать ситуацию, в которой использование общих ресурсов может приводить к возникновению клинча 

 (2) для решения проблемы клинча достаточно описать общие ресурсы как объекты класса SemaphoreSlim 

 (3) для решения проблемы клинча необходимо ввести ограничения на порядок использования ресурсов 


Номер 2
Какие утверждения справедливы для метода Wait класса  SemaphoreSlim?

Ответ:

 (1) по семантике этот метод совпадает с методом Wait класса Monitor 

 (2) является статическим методом класса SemaphoreSlim 

 (3) аргументом метода является синхронизирующий объект Locker 

 (4) если при создании семафора счетчик потоков устанавливается, равным N, то при каждом выполнении метода Wait, значение счетчика уменьшается на единицу 


Номер 3
Какие утверждения справедливы для класса SemaphoreSlim?

Ответ:

 (1) предоставляет некоторый способ блокировки потоков 

 (2) использует методы Wait и Pulse для организации блокировки 

 (3) позволяет пропустить за блокирующий семафор несколько потоков 

 (4) позволяет моделировать ситуацию совместного использования общего ресурса 




Главная / Программирование / Параллельные вычисления и многопоточное программирование / Тест 5