#include [i]
#include
std::recursive_mutex recursive_mutex_;
std::mutex mutex_;
void func(int n) {
std::lock_guard lock(mutex_);
std::cout 0) {
func(n - 1);
}
}
int main() {
func(5);
return 0;
}
按照预期,以上代码应该在打印了 5 之后就一直卡主,可是在 gcc 7.5 下,直接打印了 5 4 3 2 1 ;测试了很多在线编译器都是这个现象,只有https://www.onlinegdb.com/online_c++_compiler 这个在线编译器的运行结果符合预期。
请问各位大佬,这个现象的原因是什么?
应该不是 lock_guard 的问题,因为我自己手写了 lock_guard 查看了 lock 的声明周期,确实是在 func 执行结束之后才 unlock 。
std, mutex, func, lock_guard