我做了它具有以下特點的程序:C++優化導致螺紋鎖固
這是工作中的一類ClassA的
變量:
int8_t* p1; // this is only modified on thread1
volatile int8_t* p2;
線程1(其被鎖定)
while(p1 + 64 > p2);
線程2(其修改P2)
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