이 두 코드 세그먼트 사이에 차이점이 있습니까?
void f() {
thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
과
void f() {
static thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
배경 : 원래 STATIC 벡터 V (중간 값을 유지하기 위해 함수에 들어갈 때마다 지워짐)와 단일 스레드 프로그램이 있습니다. 프로그램을 멀티 스레딩 프로그램으로 바꾸고 싶기 때문에 어떻게 든이 정적 수정자를 제거해야합니다. 내 생각은 모든 정적을 thread_local로 바꾸고 다른 것에 대해 걱정하지 않는 것입니까? 이 접근 방식이 역효과를 낼 수 있습니까?
thread_local
로컬 변수 를 갖는 것은 ...로 시작하는 것은 의미가 없습니다. 각 스레드에는 자체 호출 스택이 있습니다.