<small id='loJO6'></small><noframes id='loJO6'>

    <tfoot id='loJO6'></tfoot>

      <legend id='loJO6'><style id='loJO6'><dir id='loJO6'><q id='loJO6'></q></dir></style></legend>
      <i id='loJO6'><tr id='loJO6'><dt id='loJO6'><q id='loJO6'><span id='loJO6'><b id='loJO6'><form id='loJO6'><ins id='loJO6'></ins><ul id='loJO6'></ul><sub id='loJO6'></sub></form><legend id='loJO6'></legend><bdo id='loJO6'><pre id='loJO6'><center id='loJO6'></center></pre></bdo></b><th id='loJO6'></th></span></q></dt></tr></i><div id='loJO6'><tfoot id='loJO6'></tfoot><dl id='loJO6'><fieldset id='loJO6'></fieldset></dl></div>
      • <bdo id='loJO6'></bdo><ul id='loJO6'></ul>

        GCC 中的函数静态变量是线程安全的吗?

        时间:2023-09-19
            <bdo id='Hb7Wx'></bdo><ul id='Hb7Wx'></ul>

          • <i id='Hb7Wx'><tr id='Hb7Wx'><dt id='Hb7Wx'><q id='Hb7Wx'><span id='Hb7Wx'><b id='Hb7Wx'><form id='Hb7Wx'><ins id='Hb7Wx'></ins><ul id='Hb7Wx'></ul><sub id='Hb7Wx'></sub></form><legend id='Hb7Wx'></legend><bdo id='Hb7Wx'><pre id='Hb7Wx'><center id='Hb7Wx'></center></pre></bdo></b><th id='Hb7Wx'></th></span></q></dt></tr></i><div id='Hb7Wx'><tfoot id='Hb7Wx'></tfoot><dl id='Hb7Wx'><fieldset id='Hb7Wx'></fieldset></dl></div>
          • <tfoot id='Hb7Wx'></tfoot>
            <legend id='Hb7Wx'><style id='Hb7Wx'><dir id='Hb7Wx'><q id='Hb7Wx'></q></dir></style></legend>
                  <tbody id='Hb7Wx'></tbody>

                1. <small id='Hb7Wx'></small><noframes id='Hb7Wx'>

                  本文介绍了GCC 中的函数静态变量是线程安全的吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  在示例代码中

                  void foo()
                  {
                    static Bar b;
                    ...
                  }
                  

                  使用GCC编译是否保证以线程安全的方式创建和初始化b?

                  compiled with GCC is it guaranteed that b will be created and initialized in a thread-safe manner ?

                  在 gcc 的手册页中,找到了 -fno-threadsafe-statics 命令行选项:

                  In gcc's man page, found the -fno-threadsafe-statics command line option:

                  不要发出额外的代码来使用C++ ABI 中指定的例程本地线程安全初始化静力学.您可以使用此选项在代码中稍微减少代码大小不需要是线程安全的.

                  Do not emit the extra code to use the routines specified in the C++ ABI for thread-safe initialization of local statics. You can use this option to reduce code size slightly in code that doesn't need to be thread-safe.

                  1. 这是否意味着 GCC 默认情况下本地静态是线程安全的?所以没有理由进行明确的保护,例如使用 pthread_mutex_lock/unlock ?

                  如何编写可移植的代码——如何检查编译器是否会添加它的守卫?还是关闭GCC的这个功能比较好?

                  How to write portable code - how to check if compiler will add its guards ? Or is it better to turn off this feature of GCC ?

                  推荐答案

                  1. 不,这意味着本地statics的初始化是线程安全的.

                  您肯定希望启用此功能.本地 static 的线程安全初始化非常重要.如果您需要对本地 static 的一般线程安全访问,那么您需要自己添加适当的保护.

                  You definitely want to leave this feature enabled. Thread-safe initialization of local statics is very important. If you need generally thread-safe access to local statics then you will need to add the appropriate guards yourself.

                  这篇关于GCC 中的函数静态变量是线程安全的吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:C++ 中的 long long int 与 long int 与 int64_t 下一篇:如何强制 gcc 链接未使用的静态库

                  相关文章

                  最新文章

                      <small id='omJhI'></small><noframes id='omJhI'>

                      • <bdo id='omJhI'></bdo><ul id='omJhI'></ul>
                      <i id='omJhI'><tr id='omJhI'><dt id='omJhI'><q id='omJhI'><span id='omJhI'><b id='omJhI'><form id='omJhI'><ins id='omJhI'></ins><ul id='omJhI'></ul><sub id='omJhI'></sub></form><legend id='omJhI'></legend><bdo id='omJhI'><pre id='omJhI'><center id='omJhI'></center></pre></bdo></b><th id='omJhI'></th></span></q></dt></tr></i><div id='omJhI'><tfoot id='omJhI'></tfoot><dl id='omJhI'><fieldset id='omJhI'></fieldset></dl></div>
                      <tfoot id='omJhI'></tfoot>
                      <legend id='omJhI'><style id='omJhI'><dir id='omJhI'><q id='omJhI'></q></dir></style></legend>