Concurrent execution during static local initialization
8.8 [stmt.dcl]
Jens Maurer

Created on 2013-09-27.00:00:00 last changed 36 months ago


Date: 2016-02-15.00:00:00

Notes from the February, 2016 meeting:

SG1 concluded that wording similar to the following should be added:

For any action A such that the declaration is sequenced before A, initialization shall happen before A. The concurrent execution shall block for completion of the initialization.
Date: 2017-02-15.00:00:00

[Adopted at the February/March, 2017 meeting as document P0250R3.]

Regarding initialization of a block-scope static variable, 8.8 [stmt.dcl] paragraph 4 says,

If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall wait for completion of the initialization.

This specification does not use the terminology of 6.9.2 [intro.multithread], so the meaning of “wait” is not clear. For example, will a concurrent thread that “waited” see (in the sense of happens-before) the result of the initialization (including side effects caused during the initialization)?

Perhaps the “synchronizes-with” terminology could be used here.

Date User Action Args
2018-02-27 00:00:00adminsetmessages: + msg6159
2018-02-27 00:00:00adminsetstatus: concurrency -> c++17
2013-09-27 00:00:00admincreate