Иниализация статической переменной C ++ и потоки

У меня есть следующий фрагмент кода C ++ 11, который использует потоки и инициализацию статических переменных. Мой вопрос:

Какие гарантии или заверения дает язык C ++ по поводу единственной инициализации статических переменных - в приведенном ниже коде отображаются правильные значения, однако я не могу найти отрывок в новом стандарте, в котором упоминается, как модель памяти должна взаимодействовать с потоками. Когда, если вообще, переменные станут локальными для потока?

#include <iostream>
#include <thread>

class theclass
{
public:
   theclass(const int& n)
   :n_(n)
   { printf("aclass(const int& n){}\n"); }
   int n() const { return n_; } 
private:
   int n_;
};

int operator+(const theclass& c, int n)
{
   return c.n() + n;
}

void foo()
{
   static theclass x = 1;
   static theclass y = x + 1;
   printf("%d %d\n",x.n(),y.n());
}

int main()
{
   std::thread t1(&foo);
   std::thread t2(&foo);
   t1.join();
   t2.join();
   return 0; 
}
5
задан Xander Tulip 18 October 2011 в 01:00
поделиться