2011-gre-cs-practice-book.pdf/Q47 — различия между версиями

Материал из DISCOPAL
Перейти к: навигация, поиск
(Ответы)
(Вопрос: Q47-08c765)
Строка 30: Строка 30:
  
 
=== Объяснение ===
 
=== Объяснение ===
 +
Разберём каждый случай:
 +
* I. a == 0 → b == 1
 +
Если a == 0, то задача 1 выполнилась полностью раньше задачи 2. Следовательно, b == 1 и это утверждение верно.
 +
* II. b == 0 → a == 1
 +
Если b == 0, то задача 2 выполнилась полностью раньше задачи 1. Следовательно, a == 1 и это утверждение верно.
 +
* III. a == 1 → b == 1
 +
В данном случае мы не можем гарантировать, что b == 1. Оно может быть равно как 1, так и 0.
  
 
{{cstest-source|2011-gre-cs-practice-book.pdf|38|46}}
 
{{cstest-source|2011-gre-cs-practice-book.pdf|38|46}}

Версия 00:07, 9 января 2025

Вопрос: Q47-08c765

Рассмотрим следующие 2 многопоточные задачи, в которых операции присваивания исполняются атомарно. Изначально, переменные с разделяемым состоянием x и y равны 0.

  • Задача 1
x = 1
a = y
  • Задача 2
y = 1
b = x

В конце выполнения обеих многопоточных задач значения переменных a и b проверяются. Какие из следующих утверждений должны быть истинными?

  • I. a == 0 → b == 1
  • II. b == 0 → a == 1
  • III. a == 1 → b == 1

Ответы

  • (A) Только I
  • (B) Только II
  • (C) Только III
  • Правильный ответ: (D) I и II
  • (E) I, II и III

Объяснение

Разберём каждый случай:

  • I. a == 0 → b == 1

Если a == 0, то задача 1 выполнилась полностью раньше задачи 2. Следовательно, b == 1 и это утверждение верно.

  • II. b == 0 → a == 1

Если b == 0, то задача 2 выполнилась полностью раньше задачи 1. Следовательно, a == 1 и это утверждение верно.

  • III. a == 1 → b == 1

В данном случае мы не можем гарантировать, что b == 1. Оно может быть равно как 1, так и 0.

Исходники — вопрос 46 на 38 странице книги «2011-gre-cs-practice-book.pdf»

Задача зарезервирована: Nikitashapovalov 20:53, 8 января 2025 (UTC)