Порядок памяти C++ на чипе Apple M1 не работаетC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Порядок памяти C++ на чипе Apple M1 не работает

Сообщение Anonymous »

При использовании порядка памяти seq_cst следующий код никогда не должен иметь v1 == 0 и v2 == 2 . Но он по-прежнему просто печатает: «Переупорядочение произошло на моем чипе Apple M1». Я действительно не знаю почему.
#include
#include
#include
#include

std::atomic v1, v2;
sem_t start_1, start_2, complete;

int main() {
sem_init(&start_1, 0, 0);
sem_init(&start_2, 0, 0);
sem_init(&complete, 0, 0);

std::thread t1([&] {
while (true) {
sem_wait(&start_1);

v1.store(1, std::memory_order_seq_cst);
asm volatile("":: : "memory");
v2.store(2, std::memory_order_seq_cst);

sem_post(&complete);
}
});

std::thread t2([&] {
while (true) {
sem_wait(&start_2);

int val1 = v1.load(std::memory_order_seq_cst);
asm volatile("":: : "memory");
int val2 = v2.load(std::memory_order_seq_cst);

if (val1 == 0 && val2 == 2) {
puts("Reorder happened");
}

sem_post(&complete);
}
});

for (int i = 0; i < 1000000; i++) {
v1 = v2 = 0;
sem_post(&start_1);
sem_post(&start_2);

sem_wait(&complete);
sem_wait(&complete);
}

t1.detach();
t2.detach();
return 0;
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... p-not-work
Ответить

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

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

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

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

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