i cant
i cant

Reputation: 421

How many times are arguments calculated in multithreaded function-scope static variable initialization?

Suppose we have a following function, which is executed by multiple threads at the same time:

void foo()
{
    static SomeClass s{get_first_arg(), get_second_arg()};
}

My question is how many times will get_first_arg and get_second_arg be executed -- exactly once, or ThreadCount times, or is it unspecified/implementation-defined behavior?

Upvotes: 1

Views: 65

Answers (1)

Alan
Alan

Reputation: 1

The local static variable s initialized only once and the first time control passes through the declaration of that variable. This can be seen from static local variable's documentation:

Variables declared at block scope with the specifier static have static storage duration but are initialized the first time control passes through their declaration (unless their initialization is zero- or constant-initialization, which can be performed before the block is first entered). On all further calls, the declaration is skipped.

(emphasis mine)

This in turn means that the arguments get_first_arg() and get_second_arg() will be evaluated only once.


Upvotes: 2

Related Questions