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

Параллельные и распределенные вычисления - тест 2

Упражнение 1:
Номер 1
            Чем характеризуется concurrent-программа?
        

Ответ:

 (1) программа порождает процессы, выполняющиеся "одновременно"  

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

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

 (4) программа может быть исполнена только на ЭВМ с несколькими физическими процессорами  


Номер 2
            Выберите верные утверждения.
        

Ответ:

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

 (2) каждый процесс многопоточной программы может породить несколько потоков  

 (3) каждый поток имеет свой стек исполнения  

 (4) потоки реализованы только в серверных дистрибутивах ОС UNIX  


Номер 3
            Выберите верное утверждение.
        

Ответ:

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

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

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

 (4) многопоточное программирование нецелосообразно применять для написания программ с графическим пользовательским интерфейсом  


Упражнение 2:
Номер 1
            Каким образом в языке Java можно реализовать многопоточную программу?
        

Ответ:

 (1) путем наследования класса Thread в пользовательских классах  

 (2) путем наследования класса Run в пользовательских классах  

 (3) путем реализации классов на основе интерфейса Runnable  

 (4) путем реализации интерфейса Thread  


Номер 2
            В чем состоят особенности многопоточного программирования?
        

Ответ:

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

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

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

 (4) многопоточные программы требуют дополнительной синхронизации при работе с общими ресурсами  


Номер 3
            Чем характеризуется состояние гонок (race condition)?
        

Ответ:

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

 (2) это состояние программы всегда приводит к ожидаемому результату  

 (3) это состояние может возникать при агрессивной оптимизации многопоточной программы компилятором  

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


Упражнение 3:
Номер 1
            Что характерно для взаимного исключения (mutual exclusion) в многопоточной программе?
        

Ответ:

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

 (2) обеспечение свободного доступа всех потоков к одной области в пространстве регистров  

 (3) потоки ожидают освобождения занятой выполняющимся потоком секции  

 (4) выполнение критической секции более чем одним потоком  


Номер 2
            Выберите верные утверждения.
        

Ответ:

 (1) синхронизация потоков в Java осуществляется с помощью встроенного в язык механизма  

 (2) нельзя синхронизировать методы класса, исходный код которого недоступен для модификации  

 (3) для содания потока необходимо реализовать метод start в интерфейсе Runnable  

 (4) в каждый момент времени только один поток может владеть монитором  


Номер 3
            Метод run (язык Java)
        

Ответ:

 (1) запускает поток исполнения  

 (2) определяет, выполняется ли поток  

 (3) задает точку входа в поток исполнения  

 (4) объявляет объект потока исполнения  


Упражнение 4:
Номер 1
            Метод sleep (язык Java)
        

Ответ:

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

 (2) останавливает выполнение только главного потока  

 (3) приостанавливает выполнение потока на заданное время  

 (4) определяет состояние потока  


Номер 2
            Метод isAlive (язык Java)
        

Ответ:

 (1) определяет приоритет потока  

 (2) определяет, выполняется ли поток  

 (3) завершает выполнение потока  

 (4) изменяет приоритет потока на указанный  


Номер 3
            Метод join (язык Java)
        

Ответ:

 (1) изменяет приоритет потока на указанный  

 (2) определяет приоритет потока  

 (3) задает точку входа в поток исполнения  

 (4) ожидает завершения потока исполнения  


Упражнение 5:
Номер 1
            Выберите верные утверждения о приоритетах потоков исполнения в Java.
        

Ответ:

 (1) потоки с одинаковыми приоритетами гарантированно получают одинаковое количество процессорного времени  

 (2) количество времени ЦП, получаемого потоком, зависит не только от его приоритета  

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

 (4) поток с низким приоритетом получает меньше процессорного времени, чем поток с высоким приоритетом  


Номер 2
            Выберите верное утверждение о приоритетах потоков исполнения в Java.
        

Ответ:

 (1) поведение планировщика потоков зависит от реализации Java  

 (2) получить значение приоритета потока можно с помощью метода setPriority  

 (3) синхронизация потоков исполнения изменяет значения их приоритетов  

 (4) поведение планировщика потоков не зависит от операционной системы  


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

Ответ:

 (1) MIN  

 (2) 0  

 (3) MIDDLE_PRIORITY  

 (4) NORM_PRIORITY  


Упражнение 6:
Номер 1
            В чем причина возникновения взаимной блокировки в мнопоточных программах на языке Java?
        

Ответ:

 (1) два потока реализованы путем реализации одинаковый методов в интерфейсе Runnable  

 (2) потоки имеют циклическую зависимость от пары синхронизированных объектов  

 (3) в одной программе имеются потоки, реализованные как расширением класса Thread, так и реализацией интерфейса Runnable  

 (4) в программе имеются потоки с разными приоритетами исполнения  


Номер 2
            Приведена реализация схемы Producer-Consumer (язык Java).
            
class Q {
    int n;
    synchronized int get() {
        return n;
    }
    synchronized void put() {
        this.n = n;
    }
}
class Producer {
    Q q;
    Producer(Q q) {
        this.q = q;
        new Thread(this, "Producer").start();
    }
    public void run() {
        int i = 0;
        while(true) {
            q.put(i++);
        }
    }
}
class Consumer {
    Q q;
    Consumer(Q q) {
        this.q = q;
        new Thread(this, "Consumer").start();
    }
    public void run() {
        while(true) {
            q.get();
        }
    }
}
class PC {
    public static void main() {
        Q q = new Q();
        new Producer(q);
        new Consumer(q);
    }
}
            
            Какие утверждения справедливы для данной программы?
        

Ответ:

 (1) в данной программе не было реализовано ни одного пользовательского потока  

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

 (3) данная программа не является корректной с точки зрения языка Java  

 (4) программа является корректной, но результат её выполнения зависит от реализации языка Java  


Номер 3
            Приведена реализация схемы Producer-Consumer (язык Java).
            
class Q {
    int n;
    synchronized int get() {
        return n;
    }
    synchronized void put() {
        this.n = n;
    }
}
class Producer implements Runnable {
    Q q;
    Producer(Q q) {
        this.q = q;
        new Thread(this, "Producer").start();
    }
    public void run() {
        int i = 0;
        while(true) {
            q.put(i++);
        }
    }
}
class Consumer implements Runnable {
    Q q;
    Consumer(Q q) {
        this.q = q;
        new Thread(this, "Consumer").start();
    }
    public void run() {
        while(true) {
            q.get();
        }
    }
}
class PC {
    public static void main() {
        Q q = new Q();
        new Producer(q);
        new Consumer(q);
    }
}
            
            Какое утверждение справедливо для данной программы?
        

Ответ:

 (1) программа является корректной, но результат её выполнения зависит от среды исполнения  

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

 (3) данная программа не является корректной с точки зрения языка Java  

 (4) в данной программе не было реализовано ни одного пользовательского потока  


Упражнение 7:
Номер 1
            Какие решения необходимо применить для корректной реализации кругового буфера?
        

Ответ:

 (1) считывание значений из буфера должно быть синхронизировано с записью значений в буфер  

 (2) буфер должен быть реализован на объектно-ориентированном языке программирования  

 (3) буфер должен содержать не более 10 значений  

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


Номер 2
            Приведена реализация очереди (язык Java). Методы doPut и doTake реализованы в классе BaseBoundedBuffer.
            
public class WaitNotifyQueue <T> extends BaseBoundedBuffer <T> {
    public WaitNotifyQueue(int size) {
        super(size);
    }
    public synchronized void put(T v) throws InterruptedException {
        while (isFull()) {
            wait ();
        }
        doPut(v);
        notifyAll ();
    }
    public synchronized T take() throws InterruptedException {
        while (isEmpty()) {
            wait();
        }
        T v = doTake ();
        notifyAll ();
        return v;
    }
}
            
            Какие функции несет на себе метод wait в данной программе?
        

Ответ:

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

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

 (3) ожидание наступления соответствующего события для возобновления работы потока исполнения  

 (4) завершение работы потока исполнения для данного экземпляра класса WaitNotifyQueue  


Номер 3
            Для чего предназначен метод notify (язык Java)?
        

Ответ:

 (1) возобновление исполнения всех потоков, из которых был вызван метод wait для того же самого объекта  

 (2) блокировка исполнения потока, из которого был вызван метод wait для того же самого объекта  

 (3) возобновление исполнения потока, из которого был вызван метод wait для того же самого объекта  

 (4) возобновление исполнения потока, из которого был вызван метод wait для всех экземпляров данного класса  


Упражнение 8:
Номер 1
            Для чего предназначен метод notifyAll (язык Java)?
        

Ответ:

 (1) возобновление исполнения всех потоков, из которых был вызван метод wait для того же самого объекта c предоставлением доступа одному из них  

 (2) блокировка исполнения потока, из которого был вызван метод wait для того же самого объекта  

 (3) возобновление исполнения потока, из которого был вызван метод wait для всех экземпляров данного класса  

 (4) возобновление исполнения всех потоков, из которых был вызван метод wait для того же самого объекта. Доступ предоставляется всем потокам одновременно  


Номер 2
            Чем характеризуется случайное пробуждение (spurious wakeup) потока в Java?
        

Ответ:

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

 (2) из-за особенностей реализации многопоточности в Java приостановленный методом wait поток может самопроизвольно возобновить работу даже не будучи активированным методами notify и notifyAll  

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

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


Номер 3
            В чем особенность примитива Condition для условной синхронизации (язык Java)?
        

Ответ:

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

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

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

 (4) примитив не содержит аналогов метода notifyAll  




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