pthread 에서 구조체를 통한 데이터 공유에 관하여

menupan의 이미지

쓰레드 사용시 전역변수를 이용하지 않고 구조체를 가지고 하려고 합니다.
예제들을 보니 대략 다음과 같더군요... :D

typedef struct{

double volatile *p_s;
pthread_mutex_t *p_s_lock;
...
}DATA;

void *thread_function(void *arg){

DATA D = *(DATA *)arg
...
pthread_mutex_lock(D.p_s_lock);
p_s = val_to_modify;
pthread_mutex_unlock(D.p_s_lock);
}

void main(){

DATA *A;
double volatile s;

for(...){

A[i].p_s = &s;
pthread_create(...);
}

for(...){

pthread_join(...);
}
}

각각의 쓰레드에서 사용하는 변수(p_s)가 main 안의 하나의 변수(s)와 어떻게 매치되는 지 궁금합니다. :?:

그리고 이것이 멀티프로세서에서 어떻게 어떻게 동작되는지도 알려주시기 바랍니다. :?:

xfree의 이미지

p_s는 s의 주소를 갖고 있고 각각의 쓰레드는 자신의
DATA 구조체 변수를 갖고 있는데.. 그안의
p_s가 main의 s와 같은 주소를 가지고 있으니까..
s는 모두들 공유하겠네요...

직접 안돌려봐서 정확한 해석인지 모르겠습니다...

그리고 멀티프로세서를 질문하신의도가 volatile때문인
것으로 보이는데 이것이 선언되어 있지 안다면
캐쉬에서 값을 읽어올 수 있으니까.. 멀티프로세서에서
처리되는 s가 값이 서로 틀려질 수도 있겠으나 volatile
이 이것을 막아주므로 항상 같은 변수값을 처리하도록
동작할것으로 예상됩니다... 흐미