0
考虑下面的代码:代码被编译器跨互斥边界重新排序
int a = 0, b = 0;
boost::mutex m;
a++;
m.lock();
m.unlock();
b++;
做什么锁是他们告诉编译器“好吧,忘记了片刻的C++标准,我不在乎什么优化如果你严格遵循这个规则,它将被允许。你不能重新排序跨越这个边界的任何内存访问“。这是否意味着a++;
将始终在b++;
之前发生?或者这是否意味着,如果在锁之间有声明,请不要使用a++
或b++
重新排序?
鉴于编译器可以看到'a'和'b'是局部变量,它可以像往常一样优化它们。在给定的代码中,另一个线程无法看到有问题的“int”,所以互斥体不会影响它们。 –