Я сделал программу, которая имеет следующие особенности:C++ оптимизации приводит к резьбового
Это работает в классе ClassA
переменные:
int8_t* p1; // this is only modified on thread1
volatile int8_t* p2;
thread1 (который блокируется)
while(p1 + 64 > p2);
thread2 (который изменяет р2)
while(true) {
//reading file
p2 += 10;
//reading file
p2 += 10;
//reading file
p2 += 10;
}
Thread1 в какой-то момент заблокирован. ОДНАКО, изменяя thread1 на следующий код, этот thread1 никогда не блокируется.
while(p1 + 64 > p2) {
printf("%d\n", p1);
}
Я скомпилировал этот код с -Ofast
. Я думаю, проблема в оптимизации. Как я могу исправить это без изменения моих флагов компилятора?
Не используйте volatile для синхронизации потоков. – knivil