| .. title:: clang-tidy - bugprone-dynamic-static-initializers |
| |
| bugprone-dynamic-static-initializers |
| ==================================== |
| |
| Finds instances of static variables that are dynamically initialized |
| in header files. |
| |
| This can pose problems in certain multithreaded contexts. For example, |
| when disabling compiler generated synchronization instructions for |
| static variables initialized at runtime (e.g. by ``-fno-threadsafe-statics``), even if a particular project |
| takes the necessary precautions to prevent race conditions during |
| initialization by providing their own synchronization, header files included from other projects may |
| not. Therefore, such a check is helpful for ensuring that disabling |
| compiler generated synchronization for static variable initialization will not cause |
| problems. |
| |
| Consider the following code: |
| |
| .. code-block:: c |
| |
| int foo() { |
| static int k = bar(); |
| return k; |
| } |
| |
| When synchronization of static initialization is disabled, if two threads both call `foo` for the first time, there is the possibility that `k` will be double initialized, creating a race condition. |