pthread 에서 구조체를 통한 데이터 공유에 관하여
글쓴이: menupan / 작성시간: 금, 2003/11/14 - 10:33오전
쓰레드 사용시 전역변수를 이용하지 않고 구조체를 가지고 하려고 합니다.
예제들을 보니 대략 다음과 같더군요... :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)와 어떻게 매치되는 지 궁금합니다. :?:
그리고 이것이 멀티프로세서에서 어떻게 어떻게 동작되는지도 알려주시기 바랍니다. :?:
Forums:
p_s는 s의 주소를 갖고 있고 각각의 쓰레드는 자신의DATA 구조체
p_s는 s의 주소를 갖고 있고 각각의 쓰레드는 자신의
DATA 구조체 변수를 갖고 있는데.. 그안의
p_s가 main의 s와 같은 주소를 가지고 있으니까..
s는 모두들 공유하겠네요...
직접 안돌려봐서 정확한 해석인지 모르겠습니다...
그리고 멀티프로세서를 질문하신의도가 volatile때문인
것으로 보이는데 이것이 선언되어 있지 안다면
캐쉬에서 값을 읽어올 수 있으니까.. 멀티프로세서에서
처리되는 s가 값이 서로 틀려질 수도 있겠으나 volatile
이 이것을 막아주므로 항상 같은 변수값을 처리하도록
동작할것으로 예상됩니다... 흐미
댓글 달기