Ошибка сегментации во время pthread_join - PullRequest
1 голос
/ 05 февраля 2020
#define SIZE 3 
#define MAX_THREADS 9 
int main() {

    ...

    pthread_t m_threads[MAX_THREADS];
    int t_num = 0;

    for (int i = 0; i < SIZE; ++i) {
        for (int j = 0; j < SIZE; ++j) {

            ...

            pthread_create(&m_threads[i], NULL, multiply, (void *) &td[t_num]);
            t_num++;
        }
    }

    for( int i = 0; i < MAX_THREADS; i++ ) {
        pthread_join(m_threads[i], NULL);
    }

    return 0;
}

Я создаю 9 потоков для умножения матриц. Расчеты успешны. Но программа вылетает, когда я пытаюсь присоединиться к потокам. Сбой программы при выполнении pthread_join(m_threads[i], NULL) во время 4-й итерации for-l oop.

Отладка программы Я получаю эту ошибку сегментации из GDB.

Thread 1 "Pthread" received signal SIGSEGV, Segmentation fault.
0x00007f7d0063ac9f in __free_tcb () from /lib/x86_64-linux-gnu/libpthread.so.0

Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.

1 Ответ

0 голосов
/ 05 февраля 2020

Изменение pthread_create(&m_threads[i] до pthread_create(&m_threads[t_num] решило проблему.

...