Главная /
Intel Parallel Programming Professional (Introduction) /
Рассмотрим задачу использования кольцевого буфера (задача "поставщик-потребитель"). Функции AddItemToBuffer и RemoveItemFromBuffer модифицируют структуру данных, разделяемую поставщиком и потребителем, и не используют синхронизацию. Предположим, что прогр
Рассмотрим задачу использования кольцевого буфера (задача "поставщик-потребитель"). Функции AddItemToBuffer и RemoveItemFromBuffer модифицируют структуру данных, разделяемую поставщиком и потребителем, и не используют синхронизацию. Предположим, что программа может выполняться как на однопроцессорных, так и на многопроцессорных системах, и одновременно могут выполняться несколько потоков-поставщиков и потоков-потребителей. Укажите, является ли решение корректным (всегда работает), или (2) некорректным (никогда не работает), или (3) опасным (в одних случаях работает, в других – нет).
Semaphore Empty = N; // Буфер содержит N записейM = unlocked;Full = 0;() {
M.Lock();
Empty.P();
AddItemToBuffer();
Full.V();
M.Unlock();
}() {
M.Lock();
full.P();
RemoveItemFromBuffer();
empty.V();
M.Unlock();
}
вопрос
Правильный ответ:
приведенное решение корректно
приведенное решение некорректно
приведенное решение опасно
Сложность вопроса
92
Сложность курса: Intel Parallel Programming Professional (Introduction)
54
Оценить вопрос
Комментарии:
Аноним
Спасибо за ответы по intiut'у.
07 мар 2019
Другие ответы на вопросы из темы программирование интуит.
- # Граф:
- # Верно ли утверждение: если в тесновложенном гнезде циклов все итерации каждого цикла гнезда независимы, то перестановка циклов в таком гнезде будет эквивалентным преобразованием?
- # В OpenMP-программе имеются две параллельные области. Возможна ли ситуация, когда один поток закончит выполнение обеих параллельных областей, в то время как другой поток все еще выполняет код первой параллельной области, при условии что все потоки запущены средствами OpenMP?
- # Пусть написана следующая параллельная программа: int *a; #pragma omp parallel { …= new int [10]; … } Какие проблемы могут наблюдаться при выполнении параллельной программы?
- # Пусть написана следующая параллельная программа: int sum = 0; #pragma omp parallel for(int i = 0; i < 100; i++) #pragma omp single sum++; Какие проблемы могут наблюдаться при выполнении параллельной программы?