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