【发布时间】:2017-02-23 08:50:35
【问题描述】:
我制作了一个具有以下特点的程序:
这是在 ClassA 中工作的
变量:
int8_t* p1; // this is only modified on thread1
volatile int8_t* p2;
thread1(被锁定)
while(p1 + 64 > p2);
thread2(修改 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 进行线程同步。
标签: c++ multithreading compiler-optimization