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

+ Recent posts