thread 안에서 static 변수 사용시.

dreampia의 이미지

thread func이 들어있는 소스에 static으로 전역변수 선언시에

생성된 threads 모두가 그 전역변수를 공유하게 되나요?

아니면 각 threads별로 static 변수를 가지게 되는 건가요?

datamind의 이미지

몇라인 짜보면 알수있을것 같은데요..

doogle의 이미지

예전에 C문법익힐때 변수형태에 대해서 자세히 알아보지 않으신 모양이군요.

괜찮은 C 문법책을 찾아서 다시 한번 그부분을 봐보시기 바랍니다.

static 은 일반 전역변수와 다르게 두어가지 큰 특징을 지니고 있으니까요.

쓰레드 코드가 있는 C소스파일에 일반적인 전역변수가 아닌 static 변수를 쓰는 것은 일단 쓰레드코드내에서만 변수를 공유하겠다는 말입니다. static 변수는 선언된 소스파일 내에서만 scope가 인정되서 일정수준의 변수은폐기능을 사용할 수 있습니다.

저도 사실 처음 C공부할때는 이해가 안돼다가 나중에 코딩하다가 이해했던 기억이나네요.

static에는 또다른 중요한 특징이 있습니다. 이건 스스로 찾아보세요. 질문하신 내용과는 직접적인 연관이 없어서리(게다가 저는 말주변이 없는지라)... ^^

Linux에서 여러가시 소스를 보다보면 공부가 참 많이 됩니다. ^^

doogle.

체스맨의 이미지

아마도 의도하신 질문에 대한 답변은,
생성된 threads 모두가 그 전역변수를 공유하게 됩니다.
입니다.

그것을 피하려면 TLS (Thread Local Storage)를 사용해야 합니다.
pthread 에서는 다음 일련의 함수들을 사용합니다.

pthread_key_create, pthread_key_delete
pthread_setspecific, pthread_getspecific

Win32는.
TlsAlloc, TlsFree, TlsSetValue, TlsGetValue
입니다.

Orion Project : http://orionids.org

crimsoncream의 이미지

저도 질문하신 의도를 추측하여 말씀드리면 :)
static keyword의 존재 여부와 무관하게 모든 전역변수는 공유됩니다.

오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.