2011-gre-cs-practice-book.pdf/Q47 — различия между версиями
(→Ответы) |
(→Вопрос: 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)