우리는 Game of life에 대한 좋은 동기화를 찾으려고합니다.두 번째 스레드가 cond_wait에서 깨어나 지 않습니다.
따라서 우리는 하나의 프린터 스레드와 현재 다음에 인쇄 할 새로운 세대의 셀을 계산하는 두 개의 스레드를 가지고 있습니다.
계산 스레드는 이전 버전이 이미 인쇄 된 경우에만 새로운 세대의 게임 계산을 시작할 수 있습니다.
따라서 우리는 계산 스레드를 모두 깨우는 프린터 스레드에서 pthread_cond_signal()
을 사용합니다. 어떤 이유
은 하나의 스레드 만 우리는 이미 대신에 신호의 방송 사용하려고
pthread_cond_wait()
에서 깨어 나면,하지만 아무런 영향을 미치지 않았다.
이 우리의 프린터 스레드가하는 일입니다 :
while(!field -> printed){
printf("waiting for print_signal: %d\n", field -> printed);
pthread_mutex_unlock(&(field -> print_mutex));
pthread_cond_wait(&(field -> print_signal), &(field -> print_mutex));
printf("print_signal received: %d\n", field -> printed);
}
printf("print_signal received2: %d\n", field -> printed);
pthread_mutex_unlock(&(field -> print_mutex));
는 그 뒤 계산 스레드가 자신의 계산을하고 설정하기 전에 완료 모든 스레드까지 기다릴 :
field -> printed = true;
//pthread_mutex_unlock(&(field -> print_mutex));
int status = pthread_cond_signal(&(field -> print_signal));
이것은 우리의 계산 스레드가하는 일입니다 필드 -> false로 다시 인쇄됩니다.
뮤텍스를 올바르게 사용하는 방법을 아직 제대로 모르는 것 같습니다.
고마워요! 모든 것이 이제 완벽하게 작동합니다 :) – Meowzen