Главная /
Intel Parallel Programming Professional (Introduction) /
Рассмотрим задачу использования кольцевого буфера (задача "поставщик-потребитель"). Функции AddItemToBuffer и RemoveItemFromBuffer модифицируют структуру данных, разделяемую поставщиком и потребителем, и не используют синхронизацию. Предположим, что прогр
Рассмотрим задачу использования кольцевого буфера (задача "поставщик-потребитель"). Функции AddItemToBuffer и RemoveItemFromBuffer модифицируют структуру данных, разделяемую поставщиком и потребителем, и не используют синхронизацию. Предположим, что программа может выполняться как на однопроцессорных, так и на многопроцессорных системах, и одновременно могут выполняться несколько потоков-поставщиков и потоков-потребителей. Укажите, является ли решение корректным (всегда работает), или (2) некорректным (никогда не работает), или (3) опасным (в одних случаях работает, в других – нет).
int Bufs = N; // Буфер содержит N записейM = unlocked;Full = 0;() {
while(1){
M.Lock();
if( Bufs != 0 ){
Bufs --;
M.Unlock();
break;
}
M.Unlock();
}
AddItemToBuffer();
}() {
while(1){
M.Lock();
if( Bufs != N ){
Bufs ++;
M.Unlock();
break;
}
M.Unlock();
}
RemoveItemFromBuffer();
}
вопрос
Правильный ответ:
приведенное решение корректно
приведенное решение некорректно
приведенное решение опасно
Сложность вопроса
56
Сложность курса: Intel Parallel Programming Professional (Introduction)
54
Оценить вопрос
Комментарии:
Аноним
спасибо за пятёрку
29 янв 2019
Другие ответы на вопросы из темы программирование интуит.
- # Какой тип планирования преимущественно используется в интерактивных системах?
- # В программе на OpenMP распараллелен следующий цикл, где выполнение функции f() может занимать существенно разное время в зависимости от значения входного аргумента #pragma omp for(i = 0; i < 1000; i++) с += func(i); Каким образом можно добиться наилучшей балансировки вычислительной нагрузки между потоками?
- # Пусть есть система с восемью вычислительными элементами. Известно, что доля последовательного кода составляет 20%. Какое максимальное ускорение можно получить с помощью технологии OpenMP?
- # Пусть написана следующая параллельная программа: #pragma omp parallel {sum = 0; #pragma omp for for(int i = 0; i < 100; i++) sum++; } Какие проблемы могут наблюдаться при выполнении параллельной программы?
- # Директива #pragma omp barrier используется для: