多线程环境下函数作用域静态变量初始化时参数函数的执行次数
问题解答
在C++11及后续标准中,get_first_arg()和get_second_arg()恰好只会被执行一次。
原因是:C++标准明确规定,函数内部的静态局部变量会在程序首次进入该变量的作用域时完成初始化,且这个初始化过程是线程安全的。当多个线程同时调用foo()时,只有一个线程会触发初始化流程——包括调用get_first_arg()和get_second_arg()来构造静态对象s,其他线程会在这个初始化点阻塞,直到初始化完全完成后才会继续执行,不会重复触发初始化逻辑。
如果是C11之前的编译器,该行为属于未指定范畴,可能出现多次调用实参函数的情况,但目前主流编译器均已支持C11及后续标准,无需考虑这种旧场景。
内容的提问来源于stack exchange,提问作者siga
相关产品推荐
相关产品推荐

