728x90
반응형
// [1]
int gTemp;
void Test(void)
{
static int sta_temp;
int loc_temp;
gTemp 변수 사용;
sta_temp 변수 사용;
loc_temp 변수 사용;
}
// =============================================
// [2]
__desclspec(thread) int gTemp;
void Test(void)
{
__desclspec(thread) static int sta_temp;
int loc_temp;
gTemp 변수 사용;
sta_temp 변수 사용;
loc_temp 변수 사용;
}
[1] 코드의 Test() 함수는 전역 변수, 정적 변수, 지역 변수를 사용하고 있다.
이 때, 두 개 이상의 스레드가 Test() 함수를 동시에 호출해서 사용하면 전역 변수와 정적 변수를 (원하지 않게) 공유하게 되어 문제가 발생할 수 있다.
==> 해결 방법
[2] 코드처럼 전역 변수와 정적 변수 앞에 __desclspec(thread) 지시자를 붙이면 된다.
이제 전역 변수와 정적 변수는 프로세스 내에 존재하는 스레드별로 따로 존재하게 되어 메모리 공유 문제가 생기지 않는다.
( 지역 변수는 스레드마다 스택 영역에 별도로 할당되므로 스레드 지역 저장소를 사용할 필요가 없다.)
728x90
반응형
'c++ > c++' 카테고리의 다른 글
thread_local (1) | 2022.09.13 |
---|---|
for문 (0) | 2022.08.08 |
클래스 전방선언 (0) | 2021.09.07 |
. 과 -> 의 차이 (1) | 2021.07.12 |
explicit, 댕글링 포인터(Dangling Pointer) (0) | 2021.07.08 |