Я не уверен, как гарантии упорядочения памяти для атомных переменных в C++ 11 влияют на операции в другой памяти.C++ 11 Атомный порядок памяти с неатомными переменными
Предположим, у меня есть один поток, который периодически вызывает функцию записи, чтобы обновить значение, и другой поток, который вызывает чтение, чтобы получить текущее значение. Гарантировано ли, что эффекты d = value;
не будут видны до эффектов a = version;
и будут видны до эффектов b = version;
?
atomic<int> a {0};
atomic<int> b {0};
double d;
void write(int version, double value) {
a = version;
d = value;
b = version;
}
double read() {
int x,y;
double ret;
do {
x = b;
ret = d;
y = a;
} while (x != y);
return ret;
}
В вашем коде нет никаких барьеров; почему вы отметили его «барьерами памяти»? –
Поскольку я думал, что ответ может быть чем-то вроде «это неверно, вам нужно использовать барьер памяти». –
Возможно, вы захотите изменить то, что вы просите. Люди, отвечающие на этот вопрос, отвратительно педантичны и, вероятно, приносят больше вреда, чем пользы для тех, кому это интересно. –