在示例代码中
void foo()
{
static Bar b;
...
}
编译为GCC是否保证b
将以线程安全的方式创建和初始化?
在 gcc 的手册页中,找到了-fno-线程安全-静态命令行选项:
不要发出额外的代码来使用
C++ ABI 中指定的例程
本地线程安全初始化
静力学。您可以使用此选项
稍微减少代码大小
不需要是线程安全的。
这是否意味着 GCC 默认情况下本地静态是线程安全的?因此没有理由进行明确的保护,例如和pthread_mutex_lock/unlock
?
如何编写可移植代码 - 如何检查编译器是否会添加其防护?还是关闭GCC的这个功能比较好?
不,这意味着初始化本地的static
s 是线程安全的。
您肯定希望启用此功能。本地的线程安全初始化static
s 非常重要。如果您通常需要对本地进行线程安全访问static
那么您需要自己添加适当的防护装置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)