의사 코드를 종료 스레드 장벽을 처리하기 : 장벽방법
void * thread_start(void *arg) {
while (1) {
/* for each column. Only run columns the thread_num
is assigned to */
column_count = thread_num;
for (; column_count < dim - 1; column_count+=threads) {
/* do thread work for data chunk */
}
/* barrier */
barrier_result = pthread_barrier_wait(barrier);
if (not_finished == 0) {
/* finished */
break;
/* break while loop, end thread.
The barrier is now broken because it is no longer
getting called by this thread */
}
/* we are not finished, loop around and
do thread work on next data chunk */
}
}
내 문제는 당신이 다른 스레드 전에 종료 스레드를 처리 어떻게?
장벽이란 모든 스레드가 다른 모든 스레드를 기다려야한다는 것을 의미합니다.
모든 스레드가 동시에 종료되도록하기위한 기술은 무엇입니까?
나는 루프를 연속하는 그러나 "스레드 작업을"무시했지만,이 경우에는 모두 8 개 개의 스레드를 완료하고 "당신의 모든 일을 수행 할 수 있습니다 이제 모든 출구"를 스레드를 알 수있는 합리적인 방법이 없습니다 편집 :
알고리즘 :
- 실행 작업 데이터의 조각 스레드의 세그먼트가 완료되면 termina 테.
- 차단 대기.
하나 인 장벽과 장벽을 덮어 쓸 수있는 우아한 방법이 있나요 :
- 하나 개의 스레드는 새로운 데이터
- 반복 1.
편집 2 데이터의 조각을 대체 크기가 더 작습니까? (장벽 주위에 뮤텍스를 두지 않음)
우아하지 않은 방법도 있습니다. 같은 장벽에서 다른 장벽을 덮어 쓰거나'pthread_barrier_init'을 두 번 이상 호출 할 수 없습니다. – chill