1
다음 코드를 고려 a
이후스레드 로컬 전역이
#include <iostream>
#include <thread>
using std::cout;
using std::thread;
thread_local int a;
void foo()
{
a = a + 1;
cout << a << "\n";
}
void bar()
{
cout << a << "\n";
}
void baz()
{
cout << "Something\n";
}
int main()
{
thread first(foo);
thread second(bar);
thread third(baz);
second.join();
first.join();
third.join();
cout << a;
}
스레드 저장 기간을 갖고, 우리는 적어도 세 가지 목적, a로 표기하고 first
, second
에 사용 있고 main
스레드. third
안에 a
을 사용하지 않습니다. 세 번째로 사용할 수있는 0으로 초기화 된 a
이 있습니까? 스레드 저장 기간이
비 지역 변수는 스레드 실행의 결과로 초기화 : 나는 표준이에 대해 아무것도 찾을 수 없기 때문에 나는이 질문을 부탁드립니다.
구현이 정의되어 있습니까?
귀하의 질문은 비 관찰 된 행동에 관한 것입니다; 제로 초기화 된 'a'가 'third'에 존재하는지 또는 존재하지 않는지 말하는 것은 이치에 맞지 않는다. – ecatmur
@ecatmur 조금 명확하지 않습니다. 0으로 초기화 된 객체가 실제로 메모리 할당을 필요로하지 않습니까? –
관찰 할 수없는 의미입니다. 구현은 메모리를 할당 할 수 있지만 프로그램에는 보이지 않습니다. – ecatmur