Является ли одновременный доступ к энергозависимым источникам данных гонкой? Хотя кажется, что это работает на практике?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Является ли одновременный доступ к энергозависимым источникам данных гонкой? Хотя кажется, что это работает на практике?

Сообщение Anonymous »

volatile global x = 0;
reader() {
while (x == 0) {}
print ("World\n");
}
writer() {
print ("Hello, ")
x = 1;
}
thread (reader);
thread (writer);

https://en.wikipedia.org/wiki/Race_cond ... operations.
Из Википедии

Точное определение гонки данных зависит от используемой формальной
модели параллелизма, но обычно оно относится к ситуация,
когда операция с памятью в одном потоке потенциально может попытаться
получить доступ к ячейке памяти в то же время, когда операция с памятью в
другом потоке записывает в эту ячейку памяти, в контексте, где
это опасно.
  • Есть хотя бы один поток, который записывает данные в x. (писатель)
  • Есть хотя бы один поток, который читает x. (читатель)
  • Не существует механизма синхронизации для доступа к x. (Оба двух потока обращаются к x без каких-либо блокировок.)
Поэтому я думаю, что приведенный выше код представляет собой гонку данных. (Очевидно, это не состояние гонки)
Я прав?
Тогда в чем смысл гонки данных, когда код является гонкой данных, но генерирует ожидаемый результат? (Мы увидим «Hello, World\n», предполагая, что процессор гарантирует, что сохранение по адресу становится видимым для всех инструкций загрузки, выданных после инструкции сохранения)
------ ----- добавлен рабочий код cpp ------------
#include
#include

volatile int x = 0;

void reader() {
while (x == 0 ) {}
std::cout

Подробнее здесь: https://stackoverflow.com/questions/718 ... to-work-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»