Пытаясь понять, как работает pthread в C

Я пытаюсь использовать pthread в C, чтобы сравнить две строки. Идея состоит в том, чтобы увидеть, находится ли полная строка 2 в строке 1 (например, если string1 = lkajdsgl а также string2 = jd тогда у меня был бы один матч). Чего я не понимаю, так это того, как работает pthread. Здесь я создаю свои pthreads, предполагая, NUM_THREADS=3тогда у меня должно быть 3 темы, темы [0], темы [1] и темы [2]. Каждый вызовет функцию Pthrd_Substring. Строки будут считаны из файла и проанализированы в функции. Тем не менее, я не понимаю, как использовать pthread_join, Если длина строки составляет 12 символов, а у меня только 3 потока, как система узнает, что анализирует строку с 3 потоками, пока не будут проверены все 12 символов? (Функция просматривает каждую букву в строке 1 и сравнивает ее с первой буквой в строке 2, прежде чем определить, присутствует ли полная строка 2.)

int main(int argc, char *argv[])
{
    pthread_t threads[NUM_THREADS];
    int count, rc;
    long t;

    for(t=0;t<NUM_THREADS;t++){
     printf("In main: creating thread %ld\n", t);
     rc = pthread_create(&threads[t], NULL, Pthrd_Substring, (void *)t);
     if (rc){
       printf("ERROR; return code from pthread_create() is %d\n", rc);
       exit(-1);
       }
     }

    printf("The number of substrings is: %d\n", count);
    return 1;
}

Я могу использовать что-то вроде:

pthread_join(threads0, NULL);
 partial_sum += t.partial_count;
pthread_join(threads1, NULL);
 partial_sum += t.partial_count;
pthread_join(threads2, NULL);
 partial_sum += t.partial_count;

И есть глобальный итог в функции? Но позволяет ли это как-то проверить каждую букву в строке?


Я не решался включить эту часть, потому что я не разработал все это, так как я не понимаю, как именно вызов pthread работает в основном. Тем не менее, это псевдокод, который у меня есть для функции, здесь n1 длина строки string1 а также n2 длина string2:

void *Pthrd_Substring(void *thrdptr)
{
    int i,j,k;
    int count;
    int total = 0;

    for (i = thrdptr; i <= (n1-n2); i++){       
        count=0;
        for(j = i,k = 0; k < n2; j++,k++){  /*search for the next string of size of n2*/  
            if (*(s1+j)!=*(s2+k)){
                break;
            }
            else
                count++;
            if(count==n2)    
                total++;        /*find a substring in this step*/                          
        }
    }
    partial_count = total
}

1 ответ

Если длина строки составляет 12 символов, а у меня только 3 потока, как система узнает, что анализирует строку с 3 потоками, пока не будут проверены все 12 символов?

Система этого не знает - как и в случае с многопоточным программированием. Если вы хотите, чтобы каждый символ анализировался, вам нужно написать свою программу, чтобы он анализировал каждый символ.

Однако я не понимаю, как использовать pthread_join.

pthread_join просто ждет нити, чтобы выйти. Это все.

Другие вопросы по тегам