例如,有这样一段代码:
void obj::foo() {
... // some operations
std::lock_guard lock{mut_};
... // some operations and initialization ariables
lock.unlock();
... // other operations
}
如您所见,关键部分位于函数的中间,并用互斥锁隔离。但是,我在某处读到,如果它们不相互依赖,编译器可以自行决定对操作顺序进行改组,所以我想澄清一下:是否保证初始化lock
和调用之间的所有内容都lock.unlock()
将受到互斥锁的保护?或者编译器可以决定这些调用之间的某些操作可以在锁之外的其他地方执行?